我有一个带有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();
}
}
在我的 View 中,我有一个绑定(bind)到Person.name的文本框
因此,ViewModel没有执行设置方法,因为Person对象仍然相同...它正在 Model属性中执行set方法。
我想让用户更改人名并调用另一个方法(通过Web服务和其他东西搜索...),我认为此功能应该在ViewModel中。
我正在使用MVVM Light工具包中的Messenger,以在不同的 View 模型之间以及 View 和 View 模型之间进行通信。
现在,我不知道是否应该为此使用调解器,或者我是否应该知道解决该问题的另一种方法。
最佳答案
只需在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
}
}
关于c# - MVVM模型到ViewModel的通信,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5821956/