在Silverlight中使用MVVM结合RIA服务构建和验证数据是否有最佳实践或广泛接受的方法?使用WCF RIA和MVVM模式在UI上验证数据
这是我的问题的关键。假设我有一个EmployeeView,EmployeeViewModel和一些Employee实体。在常规的RIA应用程序中,我将在该视图上公开该Employee实体,并且“免费”验证,因为实体实现INotifyDataErrorInfo和IDataErrorInfo(正确?)。
现在,如果我想通过ViewModel而不是直接通过实体公开一些Employee属性,那么它变得更加复杂。我可以公开,我需要直接和他们挂钩到实体上的后端,这样的位:
private Employee _employee;
public EmployeeViewModel()
{
_employee = new Employee();
}
public string Name
{
get { return _employee.Name; }
set
{
_employee.Name = value;
// fire property change, etc.
}
}
...但我失去了实体的美味“自由”的验证。否则,我可能会在视图模型直接暴露实体,像这样
private Employee _employee;
public Employee Employee
{
get { return _employee; }
}
public EmployeeViewModel()
{
_employee = new Employee();
}
在这种情况下,视图将直接绑定到Employee实体,并在那里找到它的属性,就像这样:
<StackPanel DataContext="{Binding Employee}">
<TextBox Text="{Binding Name}" />
</StackPanel>
使用这种方法我们得到了“免费”验证,但它并不完全是一个干净的MVVM实现。
第三种选择是在VM中自己实现INotifyDataErrorInfo和IDataErrorInfo,但是这看起来像是很多管道代码,考虑到使用上述解决方案的容易程度以及稍微“干净” “但是在一天结束的时候更容易一些。
所以我想我的问题是,哪种方法适合在哪种情况下?我错过了更好的方法吗?
如果它是相关的,我正在查看Caliburn.Micro MVVM框架,但我希望看到一般适用的答案。
这很好,谢谢。 – 2011-04-11 00:25:35