Проверка GridView помечает всю строку как недействительную, а не только ячейку - PullRequest
0 голосов
/ 21 января 2020

Проблема

Я реализовал проверку с INotifyDataErrorInfo интерфейсом. Моя проблема в том, что вместо того, чтобы показывать только ячейку в таблице как недействительную и отмечать ее красным цветом, я получаю всю строку, помеченную красным. Когда GridView имеет много строк, каждая из которых имеет недопустимые ячейки, он не выглядит хорошо и трудно увидеть, что является недействительным. Я использую RadGridView из библиотеки WPF Telerik.

Как пометить только ячейку красным, а не всю строку?

Визуализация проблемы

В приведенном ниже Если ячейка имеет значение 'String-1.2', она недопустима. Ячейка показана как недействительная, но вся строка отмечена красным цветом, а не только ячейка. enter image description here

Исходный код

Этот класс представляет ячейку в моем 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));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...