WPF DataGrid不更新只读值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF DataGrid不更新只读值相关的知识,希望对你有一定的参考价值。

我有一个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>

如果我更新value列上的值,readonly列值不会更新,但如果我创建一个调用的按钮:

MyDataGrid.Items.Refresh();

myreadonly值正确更新。

但我想在myValue编辑操作结束时更新值(如CellEditEnding),在编辑期间我无法调用Refresh函数。我该怎么办?

谢谢。

答案

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));
    }
}

以上是关于WPF DataGrid不更新只读值的主要内容,如果未能解决你的问题,请参考以下文章

DataGrid 数据绑定/更新中的 WPF 组合框不起作用

WPF DataGrid:使单元格只读

WPF DataGrid:使单元格只读

WPF:从 DataGrid 复制

在某些条件下使用 ComboBox 只读创建一个单元格 WPF DataGrid

我希望 wpf DataGrid 其余部分中的数据是只读的,并且只有新行应该是可编辑的