0

就在我以为我终于掌握了 WPF 更改通知的时候,Timer 的一些虫子破坏了我的幻想......

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 是什么?谁能解释这里出了什么问题?

4

3 回答 3

1

依靠。如果您的计时器没有在 UI 线程上被调用,那么您可能传入了错误的调度程序。如果您希望计时器函数在 UI 线程上运行,则需要传入 UI 调度程序。

于 2013-05-15T10:58:07.857 回答
1

不仅MyModel需要实现INotifyPropertyChanged,而且 setterDisplayMessage必须触发PropertyChanged事件。

String displayMessage;    
public String DisplayMessage {
      get { return displayMessage; }
      set { if (value != displayMessage) {
              displayMessage = value;
              PropertyChanged(this, new PropertyChangedEventArgs("DisplayMessage"));
            }
      }
    }
于 2013-05-15T11:27:22.493 回答
0

好的,我现在找到了。为了解释它,我将不得不详细介绍用例,我觉得这有点困难。

我会尽量简单地说:我的绑定与高级别的属性相关,但实际上我在树的下方更改了属性(由代码评估,而不是绑定)。这就是为什么没有人关心更改通知:-(

于 2013-05-15T13:21:34.813 回答