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