我在WPF UserControl的构造函数中有一些代码。基本上,我将绑定(bind)设置为XmlDataProvider(我的数据是动态的)。然后,我想在 View 上将CustomSort设置为MySorter(实现IComparer)。
问题是,如果在SetBinding调用之后直接调用GetDefaultView,则GetDefaultView将返回null-好像正在进行一些异步处理来设置ItemsSource。请注意,如果稍后稍后在按钮Click处理程序中调用相同的GetDefaultView代码,则它会很好地工作,它不会返回null,并且排序机制都可以正常工作。
MyListBox.SetBinding(ListBox.ItemsSourceProperty, binding);
ListCollectionView view = CollectionViewSource.GetDefaultView(MyListBox.ItemsSource) as ListCollectionView;
view.CustomSort = new MySorter(); // falls over - view is null
我的问题是,为什么在SetBinding之后直接调用GetDefaultView时返回null,在调用GetDefaultView并获得非null响应之前是否需要等待一个事件?
最佳答案
您的Users.ItemsSource
是ItemCollection
吗?然后, View 也可能也是 ItemCollection
,因为它继承自 CollectionView
。CollectionViewSource.GetDefaultView
返回一个ICollectionView
。有更多类从CollectionView
继承,而仅从ListCollectionView
继承。确保您的类型转换不会失败,例如使用此代码:
var view = CollectionViewSource.GetDefaultView(Users.ItemsSource);
Console.WriteLine(view.GetType());
关于c# - 在SetBinding之后,CollectionViewSource.GetDefaultView返回null。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11690725/