我有一个View,ViewModel和自定义类型类的简单场景。MVVM模型到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;
}
在视图模型我有一个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未执行se t方法,因为Person对象仍然是相同的......它正在执行Model属性中的set方法。
我想让用户更改人名并调用另一个方法(通过Web服务和其他东西搜索......),我认为这个功能应该在ViewModel中。
我使用MVVM Light工具包中的Messenger在不同的视图模型之间以及视图和视图模型之间进行通信。
现在我不知道我是否也应该使用中介,或者如果我应该知道另一种解决方法。
看起来你打算去一个好路径。我看到你正在实施验证/ INotifyPropertyChanged和东西。也许你想看看Csla.Net,它会为你处理这些东西。它提供了一个构建伟大模型的框架,并为它支持的各种UI(基本上都是这些UI)提供了一些帮助。 http://www.lhotka.net/cslanet/ – Andy 2011-04-28 17:02:02
感谢您的建议,我会看看它;-) – zapico 2011-04-28 20:22:34