ListBox、DataView 和 DataTable.RejectChanges()

发布于 2024-11-08 19:11:36 字数 772 浏览 0 评论 0原文

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

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

其中,Categories 是继承 INotifyPropertyChanged 接口的类的属性:

public class EditCategoriesPresenter : INotifyPropertyChanged
{
    private DataTable _TableOfCategories;

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

    ...
}

当所有数据更改为底层 DataTable 时(行插入和删除、列值当我执行 DataTable.RejectChanges() 行更改时,会自动反映到列表框,但不会反映列值更改。

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

我还在 DataTable.RejectChanges() 之后添加了 OnPropertyChanged("Categories") 但仍然没有运气。

有什么想法吗?

先感谢您。

I have a list box which is binded to a DataView.

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

where Categories is a property to class that inherits the INotifyPropertyChanged interface:

public class EditCategoriesPresenter : INotifyPropertyChanged
{
    private DataTable _TableOfCategories;

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

    ...
}

While all data changes to the underlying DataTable (row inserts and deletes, column value changes) are reflected to list box automatically, when I do a DataTable.RejectChanges() row changes are reflected but not column value changes.

I can understand why this is happening (the DataTable.RejectChanges does not raise any notifications for column value changes) but still cannot find any easy solution to solve it.

I also add the OnPropertyChanged("Categories") after DataTable.RejectChanges() but still no luck.

Any ideas?

Thank you in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心房的律动 2024-11-15 19:11:36

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

public BindingListCollectionView Categories {get; private set;}

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

//after reject
this.Categories.Refresh()

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

when i work with datatables i always use BindingListCollectionView for binding, cause wpf do this anyway implicitly. but now i can use the Refresh() method to refresh my ui binding.

public BindingListCollectionView Categories {get; private set;}

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

//after reject
this.Categories.Refresh()

nevertheless, what does your ListBox looks like (just the xaml you posted or some datatemplates too)? can you post a screenshot?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文