Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Datagrid更改更新许多属性?_C#_Wpf - Fatal编程技术网

C# Datagrid更改更新许多属性?

C# Datagrid更改更新许多属性?,c#,wpf,C#,Wpf,我在日志类中使用绑定到ObservableCollection的Datagrid。此外,在日志类中,我还有许多其他属性,这些属性基本上说明了需要相加的不同时间 我遇到的问题是,当从Datagrid中添加或删除某些内容时,我无法通知要更新的属性,因为我已将CanUserAddRows设置为true 有没有办法在XAML中设置来更新这些属性,或者我应该从ObservableCollection继承并重写这些方法,并使用通知添加我自己的属性 LogbookEntry.cs 日志 公共类日志{ 公共可观

我在日志类中使用绑定到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);
  }
}