在WPF驗證,什麼下列區別:WPF驗證中的ValidatesOnNotifyDataErrors和ValidatesOnDataErrors和NotifyOnValidationError有什麼區別?
ValidatesOnNotifyDataErrors =真
ValidatesOnDataErrors =真
NotifyOnValidationError =真
當你應該使用這些屬性在XAML中正確?
在WPF驗證,什麼下列區別:WPF驗證中的ValidatesOnNotifyDataErrors和ValidatesOnDataErrors和NotifyOnValidationError有什麼區別?
ValidatesOnNotifyDataErrors =真
ValidatesOnDataErrors =真
NotifyOnValidationError =真
當你應該使用這些屬性在XAML中正確?
ValidatesOnNotifyDataErrors
和ValidatesOnDataErrors
當你想要一個XAML綁定控件基於實現的接口來驗證它的輸入使用在ViewModel/Model中,對於ValidatesOnNotifyDataErrors
,該接口爲INotifyDataErrorInfo
,對於ValidatesOnDataErrors
i t是IDataErrorInfo
。
例如假設你有一個這樣的視圖模型:
class PersonViewModel : IDataErrorInfo {
public string FirstName {get; set;}
string IDataErrorInfo.Error
{
return string.Empty;
}
string IDataErrorInfo.this[string columnName] {
if (columnName == "FirstName" &&) {
if (this.FirstName.Length > 20)
return "FirstName can't be more than 20 characters.";
}
return string.Empty;
}
}
,然後在你看來,你有一個綁定到名字屬性這樣一個文本框:現在 <TextBox Text={Binding Path=FirstName, ValidatesOnDataErrors=True} />
如果用戶輸入20個字符或更多的文本框中會檢測到錯誤。
另一方面NotifyOnValidationError
用於當綁定失敗驗證時想要引發事件。
我通常在我的XAML控件中使用ValidatesOnDataErrors
進行驗證,我還沒有其他兩個需要,所以這取決於您的情況。
編輯:我正在更新我的答案,因爲我學到了一些新的東西,所以我需要使這更相關。
ValidatesOnDataErrors
在胖客戶端使用,或換言之,當被諸如臺式或WPF WinForm應用程序和模型對象在客戶機側執行的驗證實施IDataErrorInfo
。
在另一方面,ValidatesOnNotifyDataErrors
將是瘦客戶機(多層應用程序)更適合如客戶端 - 服務器應用程序(Silverlight的,WPF與WCF,等等。)在確認發生在服務器上。
這種方式,當在文本框的用戶類型的東西,例如,該值被髮送到服務器異步地進行驗證,並且當驗證結果回來引發事件(事件是精確的),則使用適當的方法查看挑選並顯示它,當然在這種情況下,模型將執行INotifyDataErrorInfo
。
另一件需要注意的事情是,INotifyDataErrorInfo只能在.NET 4.5中使用,並且...如果你被阻止支持Windows XP(因此你不能使用.NET 4.5),那麼你被卡住了與IDataErrorInfo而不是INotifyDataErrorInfo。 – cplotts