调度到使用MVVM Light时仍然需要的UI线程?

时间:2011-08-15 04:56:44

标签: mvvm-light

我希望这不是一个愚蠢的问题:我刚开始使用MVVM灯(到目前为止爱它!)。在“之前的时间”(即在使用MVVML之前),我不得不发送任何代码,这些代码会触及在其中引发INotifyPropertyChanged事件的属性设置器。

我(错误地?)认为使用MVVMlight时需求会消失。

我仍然要使用它,对吗?我的实验告诉我一个响亮的是。

所以,这是真正愚蠢的部分 - 因为需要在某处初始化MVVML dispatcherhelper类,我假设它保存了UI线程,为什么不让RaisePropertyChanged调用自动执行Dispatch?这似乎是常见的事情吗?

本身并不是批评,更多的是“它怎么会以这种方式起作用”: - )

修改 (从作者的评论中复制)

FWIW,我这样做了:

public class QViewModelBase : ViewModelBase { 
    protected override void RaisePropertyChanged(string propertyName) { 
        DispatcherHelper.CheckBeginInvokeOnUI( () => base.RaisePropertyChanged(propertyName)); 
    } 
    protected override void RaisePropertyChanged<T>(string propertyName, T oldValue, T newValue, bool broadcast) { 
        DispatcherHelper.CheckBeginInvokeOnUI( () => base.RaisePropertyChanged<T>(propertyName, oldValue, newValue, broadcast)); 
    } 
}

2 个答案:

答案 0 :(得分:1)

请参阅我的回答:Thread safe, Silverlight

我强烈推荐你的建议。

答案 1 :(得分:1)

IMO你根本不需要派遣! 只有ObservableCollection上的操作需要调度。

参考答案:Accessing ViewModel properties from separate thread