我有一个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>
如果我忽略了任何负面影响,请留下评论。感谢您的帮助!
其中Selected是公共的。问题在于,如果我在勾选或取消勾选框后按下<enter>键,ObservableCollection将被更新。但仅仅勾选框并不能触发更新。 - K J