就在我以为我终于掌握了WPF变更通知的时候,一些定时器的破坏者摧毁了我的幻想......
public MyModel _objectToRefresh;
public Refresher(MyModel objectToRefresh,Dispatcher dispatcher)
{
_objectToRefresh= objectToRefresh;
_objectToRefresh.DisplayMessage = "ChangeNotification works for this one!";
_timer = new DispatcherTimer(TimeSpan.FromSeconds(3),
DispatcherPriority.Background,
eh,
dispatcher);
_timer.Start();
}
private void eh(object sender, EventArgs e)
{
_objectToRefresh.DisplayMessage = "This Change will not show in the UI";
}
作为旁注,MyModel
实现了INotifyPropertyChanged。现在,在UI线程上运行DispatcherTimer的是什么?任何人都可以解释这里出了什么问题吗?
答案 0 :(得分:1)
取决于。如果你的计时器没有在UI线程上调用,那么你可能会传入错误的调度程序。如果希望计时器功能在UI线程上运行,则需要传入UI调度程序。
答案 1 :(得分:1)
不仅MyModel
需要实施INotifyPropertyChanged
,而DisplayMessage
的设置者必须发起PropertyChanged
次事件。
String displayMessage;
public String DisplayMessage {
get { return displayMessage; }
set { if (value != displayMessage) {
displayMessage = value;
PropertyChanged(this, new PropertyChangedEventArgs("DisplayMessage"));
}
}
}
答案 2 :(得分:0)
我会试着说明一点:我的Bindings与高级属性相关,但实际上我在树下更改属性(由代码评估,而不是绑定)。这就是为什么没有人关心变更通知的原因: - (