如何合并两个Observable Collections,只从新列表中获取新的和更改的项目,并将其添加到旧列表?

时间:2015-07-13 23:33:34

标签: c# wpf database datagrid observablecollection

我有一个WPF应用程序,它使用绑定到ObservableCollection的DataGrid元素:

ObservableCollection<Deployment> deployments = DataAccess.GetDeployments();
datagrid01.ItemsSource = deployments;

这是一个Deployment类。 Deployment对象表示在现场发生的Windows安装,因此像CurrentTime这样的事情经常发生变化。

class Deployment
{
    public string UniqueID { get; set; }        
    public string ComputerName { get; set; }       
    public string IPAddress { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }       
    public string UserName { get; set; }       
    public string TaskSequenceName { get; set; }      
    public string MachineObjectOU { get; set; }
    public DateTime? StartTime { get; set; }
    public DateTime? CurrentTime { get; set; }
    public string Status { get; set; }
}

我希望定期更新DataGrid以及对这些对象的任何更改,例如CurrentTime或其状态。完成安装后,状态变为3,如果处于错误状态,则状态变为2。

因此,我可以在计时器上获得一个新的对象集合,但是将新项目中的新项目添加到DataGrid以及更改具有更新时间的现有项目的最佳方法是什么,或者状态,还是其他什么?

2 个答案:

答案 0 :(得分:1)

将您的ObservableCollection作为属性,并使用INotifyPropertyChange接口在其上引发属性更改事件。然后,您可以将此属性绑定到xaml本身的DataGrid的itemsource。因此,无论是从UI还是从数据库中对集合进行任何更改,都会自动刷新整个列表。

答案 1 :(得分:1)

使用.Except()方法过滤来自ObservableCollection的项目

..
function sort_mixed(a, b) {
  var val_a = ..
  var val_b = ..
  return isHighToLow ? desc(val_a, val_b) : asc(val_a, val_b)