В идеале ViewModel
должно быть полностью независимым от используемой технологии пользовательского интерфейса. Теоретически мы должны быть в состоянии повторно использовать его для Windows Forms (если мы немного увеличим элементы управления Windows Forms для поддержки лучшей привязки) для веб-страниц (Я предполагаю какой-то причудливый механизм, который скомпилирует ViewModel
также в Javascript ) и для любых будущих технологий. Не все эти технологии будут использовать модель Dispatcher
.
Тем не менее, я считаю прагматичным компромиссом включить Dispatcher
в ViewModel
в наши дни. В моем базовом классе ViewModel
я проверяю текущий Dispatcher
:
protected override void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (Deployment.Current.Dispatcher == null || Deployment.Current.Dispatcher.CheckAccess())
{
base.OnPropertyChanged(sender, e);
}
else
{
Deployment.Current.Dispatcher.BeginInvoke(() => base.OnPropertyChanged(sender, e));
}
}
У меня все еще есть зависимость от System.Windows
, конечно, ну да ладно. : ->