在 Silverlight 中使用 MVVM 和 RIA 服务来构建和验证数据是否有最佳实践或被广泛接受的方法?
这是我问题的症结所在。假设我有一个 EmployeeView、EmployeeViewModel 和一些 Employee 实体。在常规 RIA 应用程序中,我将在视图上公开该 Employee 实体,并且“免费”获得验证,因为实体实现了 INotifyDataErrorInfo 和 IDataErrorInfo(对吗?)。
现在,如果我想通过 ViewModel 而不是直接通过 Entity 公开一些 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 的干净实现。
第三种选择是我自己在虚拟机中实现 INotifyDataErrorInfo 和 IDataErrorInfo ,但这似乎是一个非常多的管道代码,考虑到我使用上述解决方案是多么容易并且有一些稍微不那么“干净”的东西但是见鬼在一天结束时容易得多。
所以我想我的问题是,这些方法中的哪一种适用于哪种情况?我错过了更好的方法吗?
如果它是相关的,我正在查看 Caliburn.Micro MVVM 框架,但我很想看到通用的答案。