CollectionViewSource.GetDefaultView不在Silverlight 3中!什么是解决方案?

时间:2010-03-27 21:10:03

标签: wpf silverlight collections silverlight-3.0

Silverlight 3中的CollectionViewSource.GetDefaultView()方法。在WPF中,我有这种扩展方法:

public static void SetActiveViewModel<ViewModelType>(this ViewModelBase viewModel,
    ViewModelType collectionItem,
    ObservableCollection<ViewModelType> collection) where ViewModelType : ViewModelBase
{
    Debug.Assert(collection.Contains(collectionItem));
    ICollectionView collectionView = CollectionViewSource.GetDefaultView(collection);
    if(collectionView != null) collectionView.MoveCurrentTo(collectionItem);
}

如何在Silverlight 3中编写?

2 个答案:

答案 0 :(得分:2)

Silverlight不包含默认视图的概念。当您要求Silverlight中的控件绑定到集合时,它确实绑定到集合,它不会绑定到默认视图。

结果我认为你的扩展方法没有直接完整的端口。需要对MVVM实现进行一些重新设计。我之前没有遇到过视图模型实例集合的概念,所以我不确定在你的情况下哪些是合适的。

我在CollectionViewSource看到的一些方法是在Xaml中定义CollectionViewSource并将其Source绑定到ViewModel中的某些内容。或者,让ViewModel公开CollectionViewSource属性,并将View xaml绑定到其View proeprty。

答案 1 :(得分:1)

您可以做的一件事是手动创建CollectionViewSource,将其Source属性设置为集合,然后使用CollectionViewSource的View属性获取CollectionView。

这样的事可能有用:

public static void SetActiveViewModel<ViewModelType>(this ViewModelBase viewModel,
    ViewModelType collectionItem,
    ObservableCollection<ViewModelType> collection) where ViewModelType : ViewModelBase
{
    Debug.Assert(collection.Contains(collectionItem));
    CollectionViewSource collectionViewSource = new CollectionViewSource();
    collectionViewSource.Source = collection;
    ICollectionView collectionView = collectionViewSource.View;
    if(collectionView != null) collectionView.MoveCurrentTo(collectionItem);
}