繁体   English   中英

Datagrid更改会更新许多属性吗?

[英]Datagrid changes updating many properties?

我正在使用Loggrid类中绑定到ObservableCollection的Datagrid。 同样在Logbook类中,我还有许多其他属性,它们基本上说明了需要累加的不同时间。

我遇到的问题是,当我将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,因为当将内容添加到Entries时,我无法更新它们。 我在想:

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进行此操作...

使TotalTimeSoloTimePICTime属性成为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM