为了解决CollectionViewSource在WinRT上的不足,iPhone决定编写一个视图模型中存在的替代方案。
这在Windows上运行得很好,但是在WinRT上,CollectionChanged事件从来不是null事件,所以集合永远不会加载(除非您从页面向后导航,然后再回到页面,但这是因为视图模型存储在状态中)。
源代码在这里:https://gist.github.com/jamie94bc/6262479
谢谢!
视图模型中的
private ObservableCollection<Task> _col;
private CollectionViewSource<Task> _colView;
public ObservableCollection<Task> Col {
get { return _col ?? (_col = new ObservableCollection<T>()); }
}
public CollectionViewSource<Task> ColView {
get { return _colView ?? (_colView = new CollectionViewSource<Task>(this.Col, x => x.IsComplete, new SortDescription<Task>(x => x.Created))); }
}在XAML中的应用
<ListView ItemsSource="{Binding ColView}"></ListView>发布于 2013-10-08 17:34:25
基本上,答案是在ObservableCollection<T>实现上公开一个视图属性(作为一个CollectionViewSource )。
然后,CollectionViewSource修改View,而不是实现INotifyCollectionChanged和IEnumerable。
事实证明,在Windows 8中,INotifyCollectionChanged实际上被IObservableVector取代了,而在早期预览中,ObservableCollection根本不起作用--我猜想在Windows 8的幕后发生了一些事情,它处理的是ObservableCollection,而不是INotifyCollectionChanged。
https://stackoverflow.com/questions/18662709
复制相似问题