Ich habe ein WPF DataGrid, dessen Datenquelle eine ObservableCollection ist. Es ist eingerichtet locker wie die folgenden:Wie aktualisiere ich die ObservableCollection-Objekteigenschaft aufgrund einer Änderung in einem WPF DataGrid?
public class ItemDataCollection : ObservableCollection<ItemData>
{
}
public class ItemData : INotifyPropertyChanged
{
private bool _selected = true;
public bool Selected
{
get
{
return _selected;
}
set
{
if (value != _selected)
{
_selected = value;
NotifyPropertyChanged("Selected");
}
}
}
}
_itemDataCol = new ItemDataCollection();
<... fill the _itemDataCol with data here ...>
dataGrid1.ItemsSource = _itemDataCol;
Wenn die Sammlung aktualisiert wird, ein dataGrid1.Items.Refresh() aktualisiert DataGrid1 schön. Wenn ich jedoch die Eigenschaft "Selected" einer Zeile ändere, indem ich das Kontrollkästchen in der dieser Eigenschaft entsprechenden Zeile ein- oder auschecke, wird das Objekt in der Sammlung nicht aktualisiert. Ich habe in das CollectionChanged-Ereignis der ObeservableCollection geschaut, aber das scheint nicht ausgelöst zu werden. Welche Verkabelung benötige ich, damit dataGrid1 die Sammlung aktualisiert?
aktualisiert
Alles, was ich die ItemSource Eigenschaft auf die ObservableCollection einstellen tat und die Spalten automatisch generieren zu lassen. Ich habe seitdem geändert, um direkt zu binden, und fand mehr Details zu dem Problem. Wenn ich das Kästchen einfach ankreuze - wird keine Benachrichtigung ausgelöst. Wenn ich jedoch nach dem Aktivieren des Kontrollkästchens klicke, wird die Sammlung aktualisiert. Hier wird die Bindung:
<DataGridCheckBoxColumn Binding="{Binding Path=Selected, Mode=TwoWay}" Header="Selected"></DataGridCheckBoxColumn>
Also ich denke, die Frage ist, wie bekomme ich das Update mit, die nach dem Aktivieren oder Deaktivieren Sie das Feld zu schlagen?
Update # 2 (Ich kann nicht beantworten, wie mein rep nicht hoch genug noch ist) OK - ich glaube, ich die Lösung. Wenn ich "UpdateSourceTrigger = PropertyChanged" in die Bindung einfüge, scheint alles zu funktionieren.
Bitte hinterlassen Sie Kommentare, wenn es negative Auswirkungen davon gibt, die ich vermisse. Danke für die Hilfe!
Entschuldigung - Ich habe die Implementierung von NotifyPropertyChanged weggelassen, um den Beitrag kurz zu halten. Es ist korrekt in meinem tatsächlichen Code implementiert. –
Wird es aufgerufen? Wird set aufgerufen? Versuchen Sie, eine öffentliche Eigenschaft zu binden. Wenn das alles fehlschlägt, versuchen Sie, ItemDataCollection zu umgehen und eine ObservableCollection direkt (zum Testen) zu liefern. –
Paparazzi
Ich habe versucht, die folgenden: DataGridCheckBoxColumn> Öffentlichkeit ausgewählt ist. Das Problem stellt sich heraus, dass die ObservableCollection aktualisiert wird, wenn ich nach dem Aktivieren oder Deaktivieren des Kontrollkästchens triff. Wenn Sie das Kontrollkästchen jedoch aktivieren, reicht das Update nicht aus. –