Модель MVVM для связи ViewModel
У меня простой сценарий с View, ViewModel и классом пользовательского типа.
Класс модели выглядит примерно так:
public class Person : Validation.DataError, INotifyPropertyChanged
{
#region INotifyProperty
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
public global::System.String name
{
get
{
return _name;
}
set
{
_name= value;
RaisePropertyChanged("name");
}
}
private global::System.String _name;
}
В ViewModel у меня есть свойство Person:
private Model.Person person;
public Model.Person Person
{
get
{
return person;
}
set
{
this.person= value;
this.RaisePropertyChanged("Person");
this.SavePersonCommand.OnCanExecuteChanged();
}
}
В моем представлении у меня есть текстовое поле, связанное с Person.name
Таким образом, ViewModel не выполняет метод set, поскольку объект Person все тот же... он выполняет метод set в Свойстве Model.. p >
Я хочу, чтобы пользователь менял имя пользователя и вызывал другой метод (поиск через веб-сервис и другие материалы...), и я думаю, что эта функция должна быть в ViewModel.
Я использую Messenger из инструментария MVVM Light для связи между различными режимами просмотра и между представлениями и режимами просмотра.
Теперь я не знаю, должен ли я использовать медиатор для этого или если бы я знал другой способ решить эту проблему.
Ответы
Ответ 1
Просто подпишитесь на событие PropertyChanged Person в вашей ViewModel и проверьте свойство "Name" или что бы вы ни делали:
Person.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(Person_PropertyChanged);
void Person_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if(e.PropertyName == "Name")
{
//do something
}
}