我在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.ItemsSourceItemCollection吗?然后, 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/

10-10 19:43