在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