WPF DataGrid не обновляет значения только для чтения - PullRequest
1 голос
/ 03 апреля 2019

У меня есть List<MyClass> со следующим элементом данных:

class MyClass
{
    public double MyValue { get; set; } = 0;
    public double MyReadonlyValue
    {
        get { return MyValue +1; }
    }
}

И следующей привязкой данных DataGrid:

<DataGrid ItemsSource="{Binding MyList}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=MyValue}" Header="myvalue"/>
        <DataGridTextColumn Binding="{Binding Path=MyReadonlyValue}" Header="myreadonlyvalue" IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>

Если я обновлю значения в столбце myvalue,значения myreadonly coolumn не обновляются, но если я создаю кнопку, которая вызывает:

MyDataGrid.Items.Refresh();

, значение myreadonly обновляется правильно.

Но я бы хотел, чтобы значения обновлялись приконец операции редактирования myValue (например, CellEditEnding), и во время редактирования я не могу вызвать функцию Refresh.Как я мог это сделать?

Спасибо.

1 Ответ

1 голос
/ 03 апреля 2019

Реализуйте INotifyPropertyChanged и вызывайте событие PropertyChanged для свойства MyReadonlyValue всякий раз, когда для MyValue устанавливается новое значение:

class MyClass : INotifyPropertyChanged
{
    private double _myValue;
    public double MyValue
    {
        get { return _myValue; }
        set
        {
            _myValue = value;
            NotifyPropertyChanged();
            NotifyPropertyChanged(nameof(MyReadonlyValue));
        }
    }

    public double MyReadonlyValue
    {
        get { return MyValue + 1; }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...