2016-08-01 5 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の原因として(クリアして、再度新しいデータをロードする)、再び収集および追加データをクリアする必要はありません。私は地獄のように滑らかでなければならない。 :)

EDIT: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

すでにあります。私の編集をご覧ください。私は 'Add'関数を使わずに既存のデータをどのように置き換えるのか分かりません。 – CareTaker22

+0

編集を送信中にエラーが発生しました... $ #### @ ## $!@ –

+0

Eish that's bad luck! – CareTaker22

関連する問題