/ / WFP DataGrid ItemsSource viazanie na ObservableCollection neaktualizuje za prvé nastavenie? - c #, .net, wpf, pozorovateľná kolekcia

Položky databázy WFP DataGridVyhľadávacia väzba na položku ObservationCollection sa neaktualizuje nad rámec prvého nastavenia? - c #, .net, wpf, pozorovateľná kolekcia

Som záväzný WPF aplikácie DataGrid naObservableCollection cez DataGrid "s" ItemSource. Spočiatku DataGrid príde s hlavičkami a hodnotami, avšak aktualizácie vykonané na ObservableCollection sa neodrážajú? (Tj keď sa vrátim programovo a zvýšim "Total" hodnotu) ObservableCollection I používam nižšie.

Akékoľvek nápady, prečo a ako sa dostať mriežku dynamicky aktualizovať / viazať správne?

public class SummaryItem
{
public string ProcessName { get; set; }
public long Total { get; set; }
public long Average { get; set; }

public static SummaryItem ObservableCollectionSearch(ObservableCollection<SummaryItem> oc, string procName)
{
foreach (var summaryItem in oc)
{
if (summaryItem.ProcessName == procName) return summaryItem;
}
return null;
}
}

EDIT - Alebo možno sa jedná o otázku, čiv tomto prípade DataGrid isn "t ovládanie by som mal používať na vizualizáciu, čo je efektívne v pamäti tabuľky? To je observableCollection SummaryItem" s je v skutočnosti v pamäti tabuľky.

odpovede:

7 pre odpoveď č. 1

Ak to vidím správne, používateObservableCollection. Ak do položky ObservableCollection pridáte položky, tieto zmeny by mali byť vždy zohľadnené v službe WPF, ale ak upravujete vlastnosti položky (t. J. Zmena hodnoty „Total“ v súhrne SummaryItem), nejde o žiadnu zmenu v ObservableCollection, ale o položku SummaryItem.

Ak chcete dosiahnuť požadované správanie, musíte mať nástroj SummaryItems implementáciu rozhrania INotifyPropertyChanged na "upozornenie" WPF pri zmene vlastností:

// implement the interface
public event PropertyChangedEventHandler PropertyChanged;

// use this for every property
private long _Total;
public long Total {
get {
return _Total;
}
set {
_Total = value;
if(PropertyChanged != null) {
// notifies wpf about the property change
PropertyChanged(this, new PropertyChangedEventArgs("Total"));
}
}
}

1 pre odpoveď č. 2

práve ste narazili na klasický problém s ObservableCollection. Pre OC sú spustené iba udalosti pridania položky a udalosti odstránenia položky. To znamená, že ak sa položka zmení, NEDOSTAŤ udalosť „ItemChanged“.


0 pre odpoveď č. 3

ObservableCollection vyvolá len udalosť, keď pridáte alebo odstránite položky, ak potrebujete zvýšiť udalosť, aj keď akákoľvek položka vnútri zmien kolekcie používa BindingList.