我有一个绑定到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()
,但仍然没有运气。
有什么想法吗?
提前谢谢。
答案 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或者一些数据模板)?你能发布截图吗?