C# ListBox、DataView和DataTable.RejectChanges()
我有一个绑定到DataView的列表框C# ListBox、DataView和DataTable.RejectChanges(),c#,.net,wpf,ado.net,binding,C#,.net,Wpf,Ado.net,Binding,我有一个绑定到DataView的列表框 <ListBox ItemsSource="{Binding Path=Categories}" DisplayMemberPath="Name"></ListBox> 虽然对基础数据表的所有数据更改(行插入和删除,列值更改)都会自动反映到列表框中,但在执行数据表时,会反映行更改,但不会反映列值更改 我可以理解为什么会发生这种情况(DataTable.RejectChanges不会发出任何列值更改通知),但仍然无法找到任何简单的解
<ListBox ItemsSource="{Binding Path=Categories}" DisplayMemberPath="Name"></ListBox>
虽然对基础数据表的所有数据更改(行插入和删除,列值更改)都会自动反映到列表框中,但在执行数据表时,会反映行更改,但不会反映列值更改
我可以理解为什么会发生这种情况(DataTable.RejectChanges
不会发出任何列值更改通知),但仍然无法找到任何简单的解决方案
我还在DataTable.RejectChanges()
之后添加了OnPropertyChanged(“Categories”)
,但仍然没有成功
有什么想法吗
提前谢谢。当我使用datatables时,我总是使用BindingListCollectionView进行绑定,因为wpf总是隐式地这样做。但是现在我可以使用Refresh()方法刷新ui绑定
public BindingListCollectionView Categories {get; private set;}
this.Categories = (BindingListCollectionView)CollectionViewSource.GetDefaultView(this._TableOfCategories);
//after reject
this.Categories.Refresh()
然而,您的列表框看起来是什么样的(只是您发布的xaml或一些数据模板)?你能发布截图吗?非常感谢!它起作用了!我的列表框和我的XAML一样简单。但是你为什么提到这个?如果我使用数据模板,这个解决方案有什么问题吗?我只是以前没有在列表框中使用DisplayMemberPath=“Name”,我总是使用DataTemplate。但这一切都很好:)大多数时候我也使用数据模板,但对于这个非常简单的列表框,我认为DisplayMemberPath是最简单的方法:)
public BindingListCollectionView Categories {get; private set;}
this.Categories = (BindingListCollectionView)CollectionViewSource.GetDefaultView(this._TableOfCategories);
//after reject
this.Categories.Refresh()