2016-08-01 193 views
0

如何在不向我的收藏中添加或使用add的情况下更改ObservableCollection中的数据?如何更改ObservableCollection中的数据

var items = await service.GetTrucksAsync(); 
foreach (var item in items) 
{ 
    MyCollection.Add(new TruckItems 
    { 
     TruckId = item.TruckId, 
     TruckQuoteId = item.QuoteId, 
     TruckPhaseId = item.CurrentPhaseId, 
     TruckChassisManufacturer = item.ChassisManufacturer, 
     TruckChassisModel = item.ChassisModel, 
     TruckStatus = item.Status, 
     TruckJobNumber = item.JobNumbers, 
     TruckAddedBy = item.AddedBy, 
     TruckClientName = item.ClientName, 
     TruckClientSurname = item.ClientSurname, 
     TruckClientDetail = item.ClientDetail, 
     TruckCurrentPhase = item.CurrentPhase 
    }); 
} 
dgViewProjects.ItemsSource = MyCollection; 

我不想再次清除集合和添加数据,因为它会导致我的DataGrid的UI来“忽悠”(清,然后重新装入新的数据)。我需要它像地狱一样顺利。 :)

编辑:INotifyPropertyChanged的是在我的类中实现

public class TruckItems : INotifyPropertyChanged 
{ 
    ... 
    public event PropertyChangedEventHandler PropertyChanged; 
    void OnPropertyChanged(string propertyName) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    }   
} 

回答

1

TruckItems类需要实现的INotifyPropertyChanged接口。

例如:

public class TruckItems : INotifyPropertyChanged 
{ 
    private int _truckQuoteId; 

    public int TruckQuoteId 
    { 
     get { return _truckQuoteId; } 
     set 
     { 
      if(value != _truckQuoteId) 
      { 
       value = _truckQuoteId; 
       PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(TruckQuoteId)); 
      } 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

如果你无法改变TruckItems类(DAL),你需要创建一个新的类和复制的属性。 (例如使用Mapper


更新:

你所面对的问题是,你正在创建的TruckItems一个新的实例。

var items = await service.GetTrucksAsync(); 
foreach (var item in items) 
{ 
    var truckItem = MyCollection.FirstOrDefault(i => i.TruckId == item.TruckId); 

    bool isNew = false; 

    if(truckItem == null) 
    { 
     truckItem = new TruckItems(); 
     isNew = true; 
    } 

    truckItem.TruckId = item.TruckId; 
    truckItem.TruckQuoteId = item.QuoteId; 
    truckItem.TruckPhaseId = item.CurrentPhaseId; 
    truckItem.TruckChassisManufacturer = item.ChassisManufacturer; 
    truckItem.TruckChassisModel = item.ChassisModel; 
    truckItem.TruckStatus = item.Status; 
    truckItem.TruckJobNumber = item.JobNumbers; 
    truckItem.TruckAddedBy = item.AddedBy; 
    truckItem.TruckClientName = item.ClientName; 
    truckItem.TruckClientSurname = item.ClientSurname; 
    truckItem.TruckClientDetail = item.ClientDetail; 
    truckItem.TruckCurrentPhase = item.CurrentPhase; 

    if(isNew) 
     MyCollection.Add(truckItem); 

} 
+0

它已经是了。请查看我的编辑。我不知道如何在不使用“添加”功能的情况下替换现有的数据。 – CareTaker22

+0

发生错误提交编辑... $ #### @ ## $!@ –

+0

Eish这是不幸运的! – CareTaker22

相关问题