从DispatcherTimer更改通知

时间:2013-05-15 10:50:16

标签: c# timer inotifypropertychanged

就在我以为我终于掌握了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的是什么?任何人都可以解释这里出了什么问题吗?

3 个答案:

答案 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与高级属性相关,但实际上我在树下更改属性(由代码评估,而不是绑定)。这就是为什么没有人关心变更通知的原因: - (