我有一個 DataGrid 控制元件系結到實作 INotifyDataErrorInfo 的模型型別的 ObservableCollection。DataGrid 在 PhoneNumber 列中的單元格上正確顯示錯誤資訊。但是,我想在用戶將資料提交到資料庫之前向用戶顯示有錯誤的電話號碼的數量(例如,頁面上某處帶有工具提示的號碼)。我已經在互聯網上搜尋了有關此的任何線索,但一無所獲。這是模型類的實作:
'''
public class ContactModel : ObservableObject, INotifyDataErrorInfo
{
private readonly List<string> _errors = new();
private string _firstName = String.Empty;
public string FirstName
{
get => _firstName;
set
{
_firstName = value;
OnPropertyChanged(nameof(FirstName));
}
}
private string _lastName = String.Empty;
public string LastName
{
get => _lastName;
set
{
_lastName = value;
OnPropertyChanged(nameof(LastName));
}
}
private string _phoneNumber = string.Empty;
public string PhoneNumber
{
get => _phoneNumber;
set
{
_phoneNumber = value;
OnPropertyChanged(nameof(PhoneNumber));
}
}
public bool HasErrors
{
get
{
return _errors.Any();
}
}
public IEnumerable GetErrors(string? propertyName)
{
switch (propertyName)
{
case nameof(PhoneNumber):
if (string.IsNullOrEmpty(nameof(PhoneNumber))
{
_errors.Add("Phone number is blank");
}
break;
case nameof(FirstName):
// do nothing
break;
case nameof(LastName):
// do nothing
break;
default:
break;
}
return _errors;
}
public event EventHandler<DataErrorsChangedEventArgs>? ErrorsChanged;
}
'''
uj5u.com熱心網友回復:
這是對 INotifyDataErrorInfo 以這種方式實作的誤解
- 您只能驗證一個屬性。如果兩個屬性有錯誤,則找不到每個屬性的錯誤
- 在呼叫 GetError 之前,您無法找到模型是否有效。
添加 ValidationErrors 屬性
將“_errors”屬性作為 ObservableCollection 的公共屬性
private ObservableCollection<ValidationResult> _errors;
public ObservableCollection<ValidationResult> Errors
{
get{return _errors;}
set{_errors = value;
OnPropertyChanged(nameof(Errors));
}
}
然后在模型 cunstructor 中構造它。
然后在屬性設定器上呼叫驗證程序。
private string _phoneNumber = string.Empty;
public string PhoneNumber
{
get => _phoneNumber;
set
{
_errors.RemoveRange(_errors.Where(w=> w.Membernames.Containes(nameof(PhoneNumber))));
_phoneNumber = value;
if (string.IsNullOrEmpty(value)
{
_errors.Add(new ValidationResult("Phone number is blank",new string[]{nameof(PhoneNumber)}));
ErrorsChanged?.invoke(this,new DataErrorsChangedEventArgs(nameof(PhoneNumber)));
}
OnPropertyChanged(nameof(PhoneNumber));
}
}
將 GetError 更改為
public IEnumerable GetErrors(string? propertyName)
{
return _errors.Where(w=> w.Membernames.Containes(propertyName);
}
因此您可以將串列框(或稱為 ValidationSummary 的復雜控制元件)添加到表單并將其源系結到模型的 ValidationErrors 屬性。
InotifyPropertyInfo 的最佳實踐實作是在 basemodel(示例中的 ObservableObject)類上實作它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/440641.html
標籤:C# wpf xml 数据网格 inotifydataerrorinfo
上一篇:WPF功能區工具提示閃爍
