我有一個WPF DataGrid誰的數據源是一個ObservableCollection。它是建立鬆散的,如下:如何從WPF DataGrid中的更改更新ObservableCollection項目的屬性?
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;
當收集更新,一個dataGrid1.Items.Refresh()很好地更新DataGrid1中。但是,當通過選中或取消選中與該屬性相對應的行中的複選框來修改行的「Selected」屬性時,集合中的項不會更新。我查看了ObeservableCollection的CollectionChanged事件,但看起來並沒有觸發。我需要什麼佈線才能讓dataGrid1更新集合。
更新
所有我做的是設置的ItemSource屬性設置的ObservableCollection,讓列自動生成。我已經改變了直接綁定,並找到了更多的細節問題。當我簡單地檢查框時 - 沒有通知被觸發。但是,如果在檢查框後點擊,則會更新集合。這裏是綁定:
<DataGridCheckBoxColumn Binding="{Binding Path=Selected, Mode=TwoWay}" Header="Selected"></DataGridCheckBoxColumn>
所以我想問題是如何得到更新與檢查或取消選中框後不得不點擊?
更新#2 (我不能回答,因爲我的代表處是不夠高還) 行 - 我想我有解決方案。如果我在綁定中包含「UpdateSourceTrigger = PropertyChanged」,一切似乎都奏效。
<DataGridCheckBoxColumn Binding="{Binding Path=Selected, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Header="Selected"></DataGridCheckBoxColumn>
請留下評論,如果有任何負面影響,我可能會失蹤。謝謝您的幫助!
對不起 - 我省略了NotifyPropertyChanged的實現來保持文章簡短。它在我的實際代碼中正確實現。 – 2012-04-02 22:09:53
它會被叫嗎?集合是否被調用?請嘗試綁定到公共屬性。如果所有失敗嘗試繞過你ItemDataCollection並直接提供ObservableCollection(用於測試)。 –
Paparazzi
2012-04-02 22:14:48
我試過以下內容: DataGridCheckBoxColumn> Selected is public。問題結果是,如果在檢查或取消選中該框後點擊,則更新ObservableCollection。然而,僅僅檢查該框並不足以觸發更新。 –
2012-04-02 23:17:36