2016-08-01 6 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; 

나는 '플리커'내 데이터 그리드의 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)를 변경할 수없는 경우, 당신은 속성을 새로운 클래스를 생성하고 복사해야합니다. 당신이 TruckItems의 새로운 인스턴스를 만들 것을

당신이 직면하고있는 문제는 다음과 같습니다


업데이트 (예를 들어 Mapper 사용).

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 그건 불행입니다! – CareTaker22

관련 문제