数据网格更改更新了许多属性
本文关键字:许多 属性 更新 数据网 网格 数据 | 更新日期: 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 执行此操作...
将TotalTime
、SoloTime
、PICTime
属性OneWay
绑定值(无资源库)进行,并将 getter 实现为 LINQ 调用以Sum()
集合Entries
的值。
侦听Entries.CollectionChanged
事件,将项添加到Entries
时,侦听每个项的PropertyChanged
事件(如果没有,请实现它)。然后,当收到其中任一事件时,为相关的Logbook
属性引发PropertyChanged
事件(在添加/删除新LogbookEntry
对象的情况下,或全部引发事件)。
这样,当您的ViewModel
发生任何更改时,您可以自动通知 UI 某些内容已更改,并且 UI 将通过调用相应的 getter 属性自行更新。