/ / A ligação ItemsSource do DataGrid do WFP ao ObservableCollection não é atualizada além da primeira configuração? - c #, .net, wpf, observablecollection

WFP DataGrid ItemsSource ligação a ObservableCollection não atualiza além da primeira configuração? - c #, .net, wpf, observablecollection

Estou vinculando um aplicativo DataGrid do WPF a umObservableCollection por meio do DataGrid "s" ItemSource ". Inicialmente, o DataGrid apresenta títulos e valores, no entanto, as atualizações feitas no ObservableCollection não são refletidas? (Ou seja, quando eu voltar programaticamente e aumentar o valor" Total ") O ObservableCollection I Estou usando está abaixo.

Alguma idéia de por que e como obter a grade para atualizar / ligar dinamicamente corretamente?

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 - Ou talvez uma pergunta complementar seja senesse caso, o DataGrid não é o controle que eu deveria estar usando para visualizar o que é efetivamente uma tabela na memória? Essa é a observableCollection of SummaryItem "s é efetivamente a tabela na memória.

Respostas:

7 para resposta № 1

Se eu entendi direito, você está usando umObservableCollection. Se você adicionar itens ao ObservableCollection, essas alterações sempre deverão ser refletidas pelo WPF, mas se você editar propriedades em um item (ou seja, alterar o valor "Total" de um SummaryItem)), isso não será uma alteração no ObservableCollection, mas no SummaryItem.

Para alcançar o comportamento desejado, os SummaryItems precisam implementar a interface INotifyPropertyChanged para "notificar" o WPF quando as propriedades são alteradas:

// 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 para resposta № 2

você acabou de encontrar o problema clássico do ObservableCollection. Somente eventos de adição e remoção de item são disparados para o OC. Isso significa que, se um item for alterado, você NÃO receberá um evento "ItemChanged".


0 para resposta № 3

ObservableCollection somente gera evento quando você adiciona ou remove itens, se precisar gerar evento, mesmo que algum item dentro da coleção seja alterado, use BindingList.