Диспетчеризация в поток пользовательского интерфейса все еще требуется при использовании MVVM Light? - PullRequest
7 голосов
/ 15 августа 2011

Надеюсь, это не слишком глупый вопрос: я только начал использовать MVVM light (обожаю пока!). В «до времени» (т. Е. До использования MVVML) мне приходилось отправлять любой код, который попадет в установщик свойств, в котором было вызвано событие INotifyPropertyChanged.

Я (неправильно?) Думал, что требование исчезнет при использовании MVVMlight.

Я все еще должен использовать это, правильно? Мои эксперименты говорят мне громкое «да».

Итак, вот действительно глупая часть - поскольку существует требование инициализации где-то класса dispatcherhelper MVVML, где я предполагаю, что он сохраняет поток пользовательского интерфейса, почему бы не сделать так, чтобы вызов 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 ]

1 голос
/ 05 июня 2013

IMO вам вообще не нужно отправлять! Только операции над ObservableCollection требуют диспетчеризации.

Ссылочный ответ: Доступ к свойствам ViewModel из отдельного потока

1 голос
/ 17 августа 2011

Пожалуйста, обратитесь к моему ответу здесь: Thread Safe, Silverlight

Я настоятельно рекомендую именно то, что вы предлагаете.

...