我有一个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