【发布时间】:2011-05-11 16:06:01
【问题描述】:
在 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 的干净实现。
第三种选择是我自己在 VM 中实现 INotifyDataErrorInfo 和 IDataErrorInfo,但考虑到使用上述解决方案对我来说使用上述解决方案并稍微不那么“干净”,这似乎是一个非常多的管道代码但在一天结束时要容易得多。
所以我想我的问题是,这些方法中的哪一种适用于哪种情况?我错过了更好的方法吗?
如果它是相关的,我正在研究 Caliburn.Micro MVVM 框架,但我很想看到普遍适用的答案。
【问题讨论】:
标签: silverlight validation mvvm wcf-ria-services caliburn.micro