C# Datagrid更改更新许多属性?
我在日志类中使用绑定到ObservableCollection的Datagrid。此外,在日志类中,我还有许多其他属性,这些属性基本上说明了需要相加的不同时间 我遇到的问题是,当从Datagrid中添加或删除某些内容时,我无法通知要更新的属性,因为我已将CanUserAddRows设置为true 有没有办法在XAML中设置来更新这些属性,或者我应该从ObservableCollection继承并重写这些方法,并使用通知添加我自己的属性 LogbookEntry.cs 日志C# Datagrid更改更新许多属性?,c#,wpf,C#,Wpf,我在日志类中使用绑定到ObservableCollection的Datagrid。此外,在日志类中,我还有许多其他属性,这些属性基本上说明了需要相加的不同时间 我遇到的问题是,当从Datagrid中添加或删除某些内容时,我无法通知要更新的属性,因为我已将CanUserAddRows设置为true 有没有办法在XAML中设置来更新这些属性,或者我应该从ObservableCollection继承并重写这些方法,并使用通知添加我自己的属性 LogbookEntry.cs 日志 公共类日志{ 公共可观
公共类日志{
公共可观测集合项{get;private set;}
public decimal TotalTime{get;private set;}//这些都需要添加
公共十进制SoloTime{get;private set;}//在同一列中从
公共十进制PICTime{get;private set;}//所有条目
}
现在,Datagrid只是将TotalTime、SoloTime和PictTime列列列出为0,因为在条目中添加内容时,我无法更新它们。我在想也许:
日志
公共类日志:ObservableCollection{
公共十进制TotalTime{get;private set;}
公共十进制SoloTime{get;private set;}
公共十进制PICTime{get;专用集;}
公共覆盖添加(…){
添加(…);
TotalTime+=logbookEntry.TotalTime;
OnPropertyChanged(总时间);
SoloTime+=logbookEntry.SoloTime;
OnPropertyChanged(SoloTime);
PICTime+=logbookEntry.PICTime;
OnPropertyChanged(PictTime);
}
}
除非有任何方法可以从XAML中执行此操作…将
TotalTime
,SoloTime
,PICTime
属性单向
绑定值(无setter),并将getter实现为对项
集合中的值的LINQ调用
侦听条目。CollectionChanged
事件,在将项目添加到条目时,侦听每个项目的属性更改事件(如果没有,则执行它)。然后,当接收到这些事件中的任何一个时,为相关的日志
属性引发PropertyChanged
事件(如果添加/删除了新的日志条目
对象,则引发所有事件)
这样,当您的ViewModel
中发生任何更改时,您可以自动通知UI某些内容已更改,并且UI将通过调用相应的getter属性进行自我更新。谢谢!为了使它更具体,您能提供几行代码吗?再次感谢!
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
}
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);
}
}