Я бы порекомендовал вам ознакомиться с системой обмена сообщениями в наборе инструментов MVVM light. Это, кажется, самый простой подход, который я нашел для достижения этой цели. Вот пример того, как это работает:
Если у вас есть 2 модели просмотра - одна для поиска клиентов, другая для отображения сведений о выбранном клиенте:
В модели первого представления у вас есть такое свойство:
public string CustomerID
{
get
{
return _customerid;
}
set
{
if (_efolderid == value)
{
return;
}
var oldValue = _customerid;
_customerid = value;
// Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging
RaisePropertyChanged("CustomerID", oldValue, value, true);
}
}
Затем во второй модели представления вы регистрируетесь, чтобы получать сообщения, когда это значение изменяется от другого, например:
void registerForMessages()
{
Messenger.Default.Register<PropertyChangedMessage<string>>(this,
(pcm) =>
{
if (pcm.PropertyName == "CustomerID")
{
customerID = pcm.NewValue;
AddWorkplanCommand.RaiseCanExecuteChanged();
loadCustomerDetails();
}
});
}
Обязательно вызовите функцию registerForMessages () в конструкторе второй модели представления. Еще одна полезная вещь - создание своеобразной карты, если в вашем приложении 4 или более ViewModels. Я считаю, что легко создать его в быстром текстовом файле в решении, чтобы отслеживать все сообщения и то, для чего они предназначены, а также какие другие модели представления зарегистрированы для их получения.
Одна из действительно приятных вещей в этом заключается в том, что у вас есть одна модель просмотра, которая отправляет уведомление об изменении, например, свойство customerID, и сразу же четыре других модели просмотра получают это изменение, и все они начинают загружать изменения сами.
person
Ryan from Denver
schedule
19.07.2010