Проблема
Я реализовал проверку с INotifyDataErrorInfo интерфейсом. Моя проблема в том, что вместо того, чтобы показывать только ячейку в таблице как недействительную и отмечать ее красным цветом, я получаю всю строку, помеченную красным. Когда GridView имеет много строк, каждая из которых имеет недопустимые ячейки, он не выглядит хорошо и трудно увидеть, что является недействительным. Я использую RadGridView из библиотеки WPF Telerik.
Как пометить только ячейку красным, а не всю строку?
Визуализация проблемы
В приведенном ниже Если ячейка имеет значение 'String-1.2', она недопустима. Ячейка показана как недействительная, но вся строка отмечена красным цветом, а не только ячейка.
Исходный код
Этот класс представляет ячейку в моем GridView:
public class ShowQueueCellValue : INotifyPropertyChanged, INotifyDataErrorInfo
{
...
public object Value
{
get => this.value;
set
{
bool hasChanged = value != this.value;
this.value = value;
...
}
}
public List<ShowQueueCellValue> GridRow { get; set; }
public string ErrorMessage
{
get => this.errorMessage;
set
{
this.errorMessage = value;
IsValid = string.IsNullOrWhiteSpace(value) || value == "0";
}
}
public bool IsValid
{
get => this.isValid;
set
{
if (value != this.isValid)
{
this.isValid = value;
OnErrorsChanged(nameof(Value));
this.viewModel.OkCommand.RaiseCanExecuteChanged();
}
}
}
public IEnumerable GetErrors(string propertyName)
{
if (!IsValid && propertyName == nameof(Value))
{
yield return ErrorMessage;
}
}
public bool HasErrors => !IsValid;
public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
public void OnErrorsChanged(string propertyName)
{
ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}