2016-08-01 191 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

相關問題