我正在使用绑定到Logbook类中的ObservableCollection的Datagrid。同样在日志类中,我还有许多其他属性,这些属性基本上考虑了需要添加的不同时间。
我遇到的问题是,当我将CanUserAddRows设置为true时,我无法通知属性在Datagrid中添加或删除时更新。
有没有办法在XAML中设置更新这些属性,还是应该从ObservableCollection继承并覆盖方法并添加我自己的通知属性?
public class LogbookEntry {
public decimal TotalTime { get; set; }
public decimal SoloTime { get; set; }
public decimal PICTime { get; set; }
}
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
}
现在,Datagrid只将TotalTime,SoloTime和PICTime列列为0,因为当将内容添加到条目时,我无法更新它们。我想也许:
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做到这一点......
答案 0 :(得分:1)
设置TotalTime
,SoloTime
,PICTime
属性OneWay
绑定值(无设置器)并将getter实现为对Sum()
值的Entries
的LINQ调用来自Entries.CollectionChanged
集合。
收听Entries
事件,并在将项目添加到PropertyChanged
时,收听每个项目的PropertyChanged
事件(如果没有事件,请执行此事件)。然后,当收到这些事件中的任何一个时,为相关的Logbook
属性引发LogbookEntry
事件(或者在添加/删除新ViewModel
对象的情况下引发所有事件。)
这样,当{{1}}中的任何内容发生变化时,您可以自动通知UI某些内容已更改,并且UI将通过调用相应的getter属性来更新自身。