gpt4 book ai didi

c# - ListBox、DataView 和 DataTable.RejectChanges()

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

我有一个绑定(bind)到 DataView 的列表框。

<ListBox ItemsSource="{Binding Path=Categories}" DisplayMemberPath="Name"></ListBox>

其中 Categories 是继承 INotifyPropertyChanged 接口(interface)的类的属性:

public class EditCategoriesPresenter : INotifyPropertyChanged
{
private DataTable _TableOfCategories;

public DataView Categories { get { return _TableOfCategories.DefaultView; } }

...
}

虽然对底层 DataTable 的所有数据更改(行插入和删除、列值更改)都会自动反射(reflect)到列表框中,但当我执行 DataTable.RejectChanges() 反射(reflect)行更改但不反射(reflect)列值更改。

我能理解为什么会发生这种情况(DataTable.RejectChanges 不会针对列值更改发出任何通知)但仍然找不到任何简单的解决方案来解决它。

我还在 DataTable.RejectChanges() 之后添加了 OnPropertyChanged("Categories") 但还是不行。

有什么想法吗?

提前谢谢你。

最佳答案

当我使用数据表时,我总是使用 BindingListCollectionView 进行绑定(bind),因为 wpf 无论如何都会隐式地执行此操作。但现在我可以使用 Refresh() 方法来刷新我的 ui 绑定(bind)。

public BindingListCollectionView Categories {get; private set;}

this.Categories = (BindingListCollectionView)CollectionViewSource.GetDefaultView(this._TableOfCategories);

//after reject
this.Categories.Refresh()

不过,您的 ListBox 是什么样子的(只是您发布的 xaml 或一些数据模板)?可以发截图吗?

关于c# - ListBox、DataView 和 DataTable.RejectChanges(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6069862/

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