MVVM Light Toolkit - RelayCommands, DelegateCommands и ObservableObjects

Я только начал экспериментировать с MVVM Light Toolkit Лорана Бюньона. Думаю, мне это действительно понравится, но у меня есть пара вопросов.

Прежде чем я перейду к ним, позвольте мне объяснить, откуда я. В настоящее время я использую комбинацию Джоша Смита MVVM Foundation и другого проекта на Codeplex под названием MVVM Toolkit . Я использую ObservableObject и Messenger из MVVM Foundation и DelegateCommand и CommandReference из MVVM Toolkit.

Единственное реальное перекрытие между MVVM Foundation и MVVM Tookit состоит в том, что они оба имеют реализацию для ICommand : MVVM Foundation имеет RelayCommand , а MVVM Tookit имеет DelegateCommand . Из этих двух DelegateCommand кажется более сложным. Он использует CommandManagerHelper , который использует слабые ссылки, чтобы избежать утечек памяти.

С учетом сказанного, вот мои вопросы:

  1. Почему MVVM Light использует RelayCommand , а не ] DelegateCommand ? Является ли использование слабых ссылок в ICommand ненужным или не рекомендуется по какой-то причине?

  2. Почему нет ObservableObject в MVVM Light? ObservableObject - это, по сути, лишь часть ViewModelBase , которая реализует INotifyPropertyChanged , но его очень удобно иметь как отдельный класс, потому что модели представления - не единственные объекты, которые необходимо реализовать INotifyPropertyChanged . Например, пусть ' s скажем, у вас есть DataGrid, который привязывается к списку объектов Person . Если какое-либо из свойств в Person может измениться, пока пользователь просматривает DataGrid, Person должен будет реализовать INotifyPropertyChanged . (Я понимаю, что если Person автоматически сгенерирован с использованием чего-то вроде LinqToSql, он, вероятно, уже будет реализовывать INotifyPropertyChanged , но есть случаи, когда мне нужно создать версии модели сущности для конкретных представлений объекты, например, потому что мне нужно включить команду для поддержки столбца кнопок в DataGrid.)

Спасибо.

PS Вот код для DelegateCommand из MVVM Toolkit:

https://docs.google. com / document / pub? id = 1ApCx5SbCfHi5fBhv8Ki3zA6j34sp2t80LQZdj89v8cU

5
задан devuxer 4 March 2011 в 21:15
поделиться