Datagrid更改了许多属性?

时间:2014-11-18 05:06:45

标签: c# wpf

我正在使用绑定到Logbook类中的ObservableCollection的Datagrid。同样在日志类中,我还有许多其他属性,这些属性基本上考虑了需要添加的不同时间。

我遇到的问题是,当我将CanUserAddRows设置为true时,我无法通知属性在Datagrid中添加或删除时更新。

有没有办法在XAML中设置更新这些属性,还是应该从ObservableCollection继承并覆盖方法并添加我自己的通知属性?

LogbookEntry.cs

public class LogbookEntry {
  public decimal TotalTime { get; set; }
  public decimal SoloTime { get; set; }
  public decimal PICTime { get; set; }
}

Logbook.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
}

现在,Datagrid只将TotalTime,SoloTime和PICTime列列为0,因为当将内容添加到条目时,我无法更新它们。我想也许:

Logbook.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做到这一点......

1 个答案:

答案 0 :(得分:1)

设置TotalTimeSoloTimePICTime属性OneWay绑定值(无设置器)并将getter实现为对Sum()值的Entries的LINQ调用来自Entries.CollectionChanged集合。

收听Entries事件,并在将项目添加到PropertyChanged时,收听每个项目的PropertyChanged事件(如果没有事件,请执行此事件)。然后,当收到这些事件中的任何一个时,为相关的Logbook属性引发LogbookEntry事件(或者在添加/删除新ViewModel对象的情况下引发所有事件。)

这样,当{{1}}中的任何内容发生变化时,您可以自动通知UI某些内容已更改,并且UI将通过调用相应的getter属性来更新自身。