ListBox,DataView和DataTable.RejectChanges()

时间:2011-05-20 09:20:31

标签: c# .net wpf ado.net binding

我有一个绑定到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不会引发任何有关列值更改的通知),但仍无法找到任何解决它的简单解决方案。

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

有什么想法吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

public BindingListCollectionView Categories {get; private set;}

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

//after reject
this.Categories.Refresh()

然而,你的ListBox是什么样的(只是你发布的xaml或者一些数据模板)?你能发布截图吗?