【发布时间】:2011-08-14 21:13:03
【问题描述】:
我有一个包含 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 方法。 p>
我想让用户更改人名并调用另一个方法(通过网络服务和其他东西搜索...),我认为这个功能应该在 ViewModel 中。
我正在使用来自 MVVM Light 工具包的 Messenger 在不同的视图模型之间以及视图和视图模型之间进行通信。
现在我不知道我是否也应该为此使用调解器,或者我是否应该知道另一种方法来解决这个问题。
【问题讨论】:
-
看起来你走上了一条好路。我看到您正在实施验证/ INotifyPropertyChanged 等。也许您想查看 Csla.Net,它将为您处理这些事情。它提供了一个框架来构建出色的模型,并为它支持的各种 UI(基本上所有这些)提供了一些帮助。 lhotka.net/cslanet
-
谢谢你的建议,我去看看;-)
标签: c# .net silverlight mvvm