【问题标题】:WPF DataGrid not updating read only valuesWPF DataGrid 不更新只读值
【发布时间】:2019-04-03 09:37:10
【问题描述】:

我有一个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 列值不会更新,但如果我创建一个调用按钮:

MyDataGrid.Items.Refresh();

myreadonly 值得到正确更新。

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

谢谢。

【问题讨论】:

    标签: wpf datagrid


    【解决方案1】:

    每当MyValue 设置为新值时,实现INotifyPropertyChanged 并引发MyReadonlyValue 属性的PropertyChanged 事件:

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

    【讨论】:

      猜你喜欢
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 2015-12-04
      相关资源
      最近更新 更多