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对象仍然是相同的…它正在Model属性中执行set方法。

我想让用户更改人名并调用另一种方法(搜索Web服务和其他内容……)我认为此function应该在ViewModel中。

我正在使用MVVM Light工具包中的Messenger在不同的视图模型之间以及视图和视图模型之间进行通信。

现在我不知道我是否应该使用调解员,或者我应该知道另一种方法来解决这个问题。

只需在ViewModel中订阅Person的PropertyChanged事件,并检查“Name”属性,或者您想要做的任何事情:

 Person.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(Person_PropertyChanged); void Person_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if(e.PropertyName == "Name") { //do something } }