数据网格更改更新了许多属性

本文关键字:许多 属性 更新 数据网 网格 数据 | 更新日期: 2023-09-27 18:30:48

我在日志类中使用绑定到ObservableCollection的数据网格。 同样在日志类中,我还有许多其他属性,这些属性基本上考虑了需要加起来的不同时间。

遇到的问题是,当我在数据网格中添加或删除某些内容时,我无法通知要更新的属性,因为我将 CanUserAddRows 设置为 true。

有没有办法在 XAML 中设置以更新这些属性,或者我应该从 ObservableCollection 继承并重写方法并使用通知添加我自己的属性?

日志条目.cs

public class LogbookEntry {
  public decimal TotalTime { get; set; }
  public decimal SoloTime { get; set; }
  public decimal PICTime { get; set; }
}

日志.cs

public class Logbook {
  public ObservableCollection<LogbookEntry> Entries { get; private set; }
  public decimal TotalTime { get; private set; }   // THESE ALL NEED TO BE ADDED
  public decimal SoloTime { get; private set; }    // UP IN THE SAME COLUMN FROM
  public decimal PICTime { get; private set; }     // ALL ENTRIES
}

现在,数据网格仅将 TotalTime、SoloTime 和 PICTime 列列为 0,因为当内容添加到条目时,我无法更新它们。 我想也许:

日志.cs

public class Logbook : ObservableCollection<LogbookEntry> {
  public decimal TotalTime { get; private set; }   
  public decimal SoloTime { get; private set; }    
  public decimal PICTime { get; private set; }
  public override Add(...) {
    base.Add(...);
    TotalTime += logbookEntry.TotalTime;
    OnPropertyChanged(TotalTime);
    SoloTime += logbookEntry.SoloTime;
    OnPropertyChanged(SoloTime);
    PICTime += logbookEntry.PICTime;
    OnPropertyChanged(PICTime);
  }
}

除非我有任何方法可以从 XAML 执行此操作...

数据网格更改更新了许多属性

TotalTimeSoloTimePICTime属性OneWay绑定值(无资源库)进行,并将 getter 实现为 LINQ 调用以Sum()集合Entries的值。

侦听Entries.CollectionChanged事件,将项添加到Entries时,侦听每个项的PropertyChanged事件(如果没有,请实现它)。然后,当收到其中任一事件时,为相关的Logbook属性引发PropertyChanged事件(在添加/删除新LogbookEntry对象的情况下,或全部引发事件)。

这样,当您的ViewModel发生任何更改时,您可以自动通知 UI 某些内容已更改,并且 UI 将通过调用相应的 getter 属性自行更新。