2016-08-01 35 views
0

Wie kann ich die Daten in meiner ObservableCollection ändern, ohne add zu meiner Sammlung hinzuzufügen oder zu verwenden?So ändern Sie Daten in 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; 

Ich will nicht die Sammlung löschen und die Add-Daten wieder, wie es meinen Datagrid UI zu ‚Flimmern‘ Ursachen (klar und wieder neue Daten laden). Ich brauche es glatt wie die Hölle. :)

EDIT: INotifyPropertyChanged in meiner Klasse implementiert

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

Antwort

1

Sie TruckItems Klasse braucht die INotifyPropertyChanged Schnittstelle zu implementieren.

Zum Beispiel:

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; 
} 

Wenn Sie nicht auf die TruckItems Klasse (DAL) zu ändern, müssen Sie eine neue Klasse erstellen und die Eigenschaften kopieren. (Zum Beispiel unter Verwendung eines Mapper)


Update:

Das Problem Sie konfrontiert sind, ist, dass Sie eine neue Instanz von TruckItems zu schaffen.

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

Es ist bereits. Bitte sehen Sie sich meinen EDIT an. Ich weiß nicht, wie ich meine vorhandenen Daten ersetzen kann, ohne die Funktion 'Add' zu verwenden. – CareTaker22

+0

Beim Übergeben der Bearbeitung ist ein Fehler aufgetreten ... $ #### @ ## $! @ –

+0

Eish, das ist Pech! – CareTaker22