通常,要获取控件的集合视图,我会调用以下内容:
CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(list.ItemsSource);
通常情况下,这是在xaml文件的代码后台完成的。
然而,在MVVM中,ViewModel不应该知道View的存在。如果我想以MVVM方式获取控件的CollectionView,该怎么做呢?
你可以在ViewModel中获取CollectionView
1- 你拥有列表的数据源,将列表的项源与此已知数据源绑定。
2- 假设数据源是名为dt的DataTable。
CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(dt);
this will give you the CollectionView in ViewModel
你需要在ViewModel中将ItemsSource定义为属性,例如:
public CollectionView _sourceForList;
public CollectionView SourceForList
{
get
{
return _sourceForList;
}
set
{
_sourceForList = value;
}
}
然后在XAML中,您可以将此属性绑定到列表
<ListBox Margin="9,30,9,0"
Name="listBox1" ItemsSource="{Binding SourceForList}" }/>
你可以这样调用
CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(SourceForList);
希望这可以帮到你
在 xaml 文件(视图)的代码后台中检索 CollectionView。MVVM 模式不是为了消除代码后台,而是为了关注点分离和可测试性。
WPF 应用程序框架 (WAF) 的 BookLibrary 示例展示了如何在 MVVM 应用程序中使用 CollectionView 进行过滤。