我與DataGrid的一個簡單的WPF應用程序wchich被綁定到該列表以Employee對象:WPF Datagrid的新行驗證
public class Employee
{
private string _name;
public int Id { get; set; }
public string Name
{
get { return _name; }
set
{
if (String.IsNullOrEmpty(value))
throw new ApplicationException("Name cannot be empty. Please specify the name.");
_name = value;
}
}
正如你所看到的,我想阻止不設置Name屬性創建員工。 所以,我做了一個驗證規則:
public class StringValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
string str = value as string;
if (String.IsNullOrEmpty(str))
return new ValidationResult(false, "This field cannot be empty");
else
return new ValidationResult(true, null);
}
}
的名稱字段的XAML如下:
<DataGridTextColumn Header="Name"
ElementStyle="{StaticResource datagridElStyle}" >
<DataGridTextColumn.Binding>
<Binding Path="Name" Mode="TwoWay" NotifyOnValidationError="True" ValidatesOnExceptions="True" UpdateSourceTrigger="PropertyChanged" >
<Binding.ValidationRules>
<emp:StringValidationRule/>
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
如果我嘗試編輯在DataGrid中現有員工行的名稱,將其設置爲空字符串,datagrid標記錯誤的字段,不允許保存行。這是正確的行爲。
但是,如果我創建一個新行並在鍵盤上按回車鍵,這個新行創建_name設置爲NULL,驗證不起作用。我想這是因爲DataGrid調用新行對象的默認構造函數並將_name字段設置爲NULL。
什麼是驗證新行的正確方法?
謝謝,我會研究它,並張貼在這裏,如果我找到任何解決方案。但驗證編輯工作正常,我認爲可能有一些簡單的方法來驗證新行,因爲這是一項非常普遍的任務。 – MyUserName
是的,Employee類中的IDataError實現有所幫助。我在這裏找到了一個很好的例子:http://www.codeproject.com/KB/WPF/WPFDataGridExamples.aspx#errorinfo – MyUserName
@MyUserName:很高興幫助。 :) –