【发布时间】:2016-11-10 08:44:43
【问题描述】:
我有简化的应用程序来显示我的问题
当我单击按钮时,它会更改 ViewModel 的 Text 属性,并且 TextBlock.Text 会更新。
MainPage.xaml
<StackPanel>
<Button Click="ButtonBase_OnClick">Button to change text</Button>
<TextBlock Text="{x:Bind ViewModel.Text, Mode=OneWay}"></TextBlock>
</StackPanel>
MainPage.xaml.cs
public MainPage()
{
ViewModel = new ViewModel();
this.InitializeComponent();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
ViewModel.Text = "x:Bind works";
}
ViewModel 类有一个字符串属性(Text)并实现了INotifyPropertyChange 接口。
当 ViewModel 未在 ctor 中设置时问题开始(即 viewModel 为 null 并在运行时更改):
public MainPage()
{
//ViewModel = new ViewModel();//this line has been removed
this.InitializeComponent();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
ViewModel = new ViewModel();//this line has been added
ViewModel.Text = "x:Bind does not work";
}
Complited binding is not working(文本未更改)我无法弄清楚为什么会这样...我需要将 viewModel 从 null 更改(vm 为 null,因为它正在等待实际应用中的一些数据)
【问题讨论】:
-
当然可以,因为没有通知ViewModel发生了变化
-
你的意思是 ViewModel 属性?如何通知更改 - 我不想在 MainPage 中实现 INotifyPropertychange
-
没有魔法,您必须通知页面 ViewModel 的内容已更改。不管你怎么做,但你必须这样做
-
也许你应该使用 DataContext 属性 - 已经有一个内置事件 DataContextChanged 并且绑定系统知道这一点
-
如果您希望项目成功绑定,那么在没有实现 INotifyPropertyChange 的情况下,除了在 poco 中设置属性之外,您还需要做更多的事情。如果您是 xaml 和绑定的新手,我将研究 MVVM 的工作原理,您将解决该问题。 msdn.microsoft.com/en-gb/library/hh848246.aspx