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

标签 c# .net wpf ado.net binding

我有一个绑定(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/

相关文章:

c# - 将 C++ 结构转换为 C#

c# - 比较 bouncycaSTLe x509 与 x509certificate2

c# - RichTextBox 垂直显示文本

c# - 使用字典值获取字典键

c# - 如何改变 GraphQL for .NET 中的自定义对象列表

c# - 深度复制引用类型

.net - 错误 : Could not load the file or assembly 'ExcelAddIn1.XmlSerializers' or one of it's dependencies. 系统找不到指定的文件

.net - 如何在 WatiN 中滚动 Firefox 和 IE?

WPF Dispatcher 不像 BGWorker 那样工作

c# - 在 ListBox 中显示自定义对象列表,为每个对象使用自定义用户控件