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中编写?
答案 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);
}