[英]Datagrid changes updating many properties?
我正在使用Loggrid类中绑定到ObservableCollection的Datagrid。 同样在Logbook类中,我还有许多其他属性,它们基本上说明了需要累加的不同时间。
我遇到的问题是,当我将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,因为当将内容添加到Entries时,我无法更新它们。 我在想:
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调用,以对Entries
集合中的值进行Sum()
调用。
侦听Entries.CollectionChanged
事件,将项目添加到Entries
,侦听每个项目的PropertyChanged
事件(如果没有,请实施该事件)。 然后,当接收到这些事件中的任何一个时,为相关的Logbook
属性引发一个PropertyChanged
事件(或在添加/删除新LogbookEntry
对象的情况下LogbookEntry
所有事件)。
这样,当ViewModel
发生任何更改时,您可以自动通知UI某些更改,并且UI将通过调用适当的getter属性进行更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.