1

为了解决 WinRT、Android、iPhone 上的不足CollectionViewSource,我决定编写一个存在于视图模型中的替代方案。

这在 Windows Phone 上运行良好,但在 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>
4

1 回答 1

1

答案基本上是在实现上公开一个视图属性(作为一个ObservableCollection<T>CollectionViewSource

CollectionViewSourcethen 修改了View相当执行的INotifyCollectionChangedand IEnumerable

事实证明,它INotifyCollectionChanged实际上在 Windows 8 中被替换为IObservableVector,并且在早期的预览ObservableCollection中根本不起作用——我认为 Windows 8 的幕后发生了一些事情,它处理ObservableCollections 而不是INotifyCollectionChanged.

于 2013-10-08T17:34:25.220 回答