gpt4 book ai didi

c# - 如何根据 WPF DataGrid 中的更改更新 ObservableCollection 项的属性?

转载 作者:行者123 更新时间:2023-11-30 14:15:30 25 4
gpt4 key购买 nike

我有一个 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。但是,当我通过选中或取消选中与该属性对应的行中的复选框来修改该行的“已选择”属性时,集合中的项目不会更新。我查看了 ObeservableCollection 的 CollectionChanged 事件,但它似乎没有被触发。我需要什么连接才能让 dataGrid1 更新集合。

更新

我所做的只是将 ItemSource 属性设置为 ObservableCollection 并让列自动生成。从那以后,我改为直接绑定(bind),并找到了问题的更多细节。当我只是选中该框时 - 不会触发任何通知。但是,如果我在选中该框后点击,则会更新该集合。这是绑定(bind):

<DataGridCheckBoxColumn Binding="{Binding Path=Selected, Mode=TwoWay}" Header="Selected"></DataGridCheckBoxColumn>

所以我想问题是如何在选中或取消选中该框后必须点击才能获得更新?

更新#2(我无法回答,因为我的代表还不够高)好的 - 我想我有解决方案。如果我在绑定(bind)中包含“UpdateSourceTrigger=PropertyChanged”,一切似乎都有效。

<DataGridCheckBoxColumn Binding="{Binding Path=Selected, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Header="Selected"></DataGridCheckBoxColumn>

如果有任何我可能遗漏的负面影响,请发表评论。感谢您的帮助!

最佳答案

CollectionChanged 用于插入和删除。 NotifyPropertyChanged 用于更新项目。在发布的代码中,您实际上并未实现 INotifyPropertyChanged。

   public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}

而且我认为绑定(bind)到返回 _itemDataCol 的公共(public)属性会更干净

否则 celopez3 的 TwoWay 答案

关于c# - 如何根据 WPF DataGrid 中的更改更新 ObservableCollection 项的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9984274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com