计算列更改时,WPF DataGrid刷新单元格

本文关键字:WPF DataGrid 刷新 单元格 计算 | 更新日期: 2024-09-20 13:46:51

试图创建一个交互式网格,在用户键入值时更新计算列。理想情况下,当添加行并更改现有行时,计算出的只读单元格将在光标离开修改后的单元格时自动更新到最低限度。理想情况下,如果性能下降不是问题,则在用户打字时。

使用这样的实体数据模型:

public class CalculatorContext : DbContext
{
    public CalculatorContext() : base("name=CalculatorContext") { }
    public virtual DbSet<MyEntity> MyEntities { get; set; }
    public virtual DbSet<Calculation> Calculations { get; set; }
}
public class MyEntity
{
    public MyEntity()
    {
        Calculations = new ObservableCollection<Calculation>();
    }
    [Key]
    public int EntityId { get; set; }
    public string Name { get; set; }
    public virtual ObservableCollection<Calculation> Calculations { get; set; }
}
public class Calculation
{
    [Key]
    public int CalcId { get; set; }
    public int EntityId { get; set; }
    public int VariableX { get; set; }
    public int VariableY { get; set; }
    [NotMapped]
    public int Sum { get { return VariableX + VariableY; } }
    [NotMapped]
    public int Product { get { return VariableX * VariableY; } }
    public virtual MyEntity ParentEntity { get; set; }
}

以下网格仅在按总和和乘积列排序(或保存并刷新)时刷新该列:

    <DataGrid x:Name="calculationsDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" 
              Margin="30,30,30,70" RowDetailsVisibilityMode="VisibleWhenSelected" CellEditEnding="calculationsDataGrid_CellEditEnding" >
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="variableXColumn" Binding="{Binding VariableX}" Header="X" Width="SizeToHeader"/>
            <DataGridTextColumn x:Name="variableYColumn" Binding="{Binding VariableY}" Header="Y" Width="SizeToHeader"/>
            <DataGridTextColumn x:Name="sumColumn" Binding="{Binding Sum}" Header="Sum" IsReadOnly="True"/>
            <DataGridTextColumn x:Name="productColumn" Binding="{Binding Product}" Header="Product" IsReadOnly="True"/>
        </DataGrid.Columns>
    </DataGrid>

正在调用DataGrid。项目。CellEditEnding事件的Refresh()只会导致"InvalidOperationException:在AddNew或EditItem事务期间不允许'Refresh'。"。实际上,同一行上只有2个只读单元格需要刷新。

正如你所看到的,我正在使用ObservableCollection。我需要执行INotifiedChanges或类似的操作吗?如果是,怎么办?

计算列更改时,WPF DataGrid刷新单元格

是的,要动态通知数据绑定控件属性更改,您需要在集合中的元素上实现iNotifyPropertyChanged。然后,在组成计算属性更改的属性上,您还可以通知计算属性已更改。