MVVM中的集合视图

3

通常,要获取控件的集合视图,我会调用以下内容:

            CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(list.ItemsSource);

通常情况下,这是在xaml文件的代码后台完成的。

然而,在MVVM中,ViewModel不应该知道View的存在。如果我想以MVVM方式获取控件的CollectionView,该怎么做呢?

3个回答

1

你可以在ViewModel中获取CollectionView

1- 你拥有列表的数据源,将列表的项源与此已知数据源绑定。

2- 假设数据源是名为dt的DataTable。

 CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(dt); 

 this will give you the CollectionView in ViewModel

例如,如果我将列表的ItemsSource绑定到SOMEPROPERTY。那么,我只需要调用(CollectionView)CollectionViewSource.GetDefaultView(SOMEPROPERTY)? - Kiang Teng

1

你需要在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);

希望这可以帮到你


0

在 xaml 文件(视图)的代码后台中检索 CollectionView。MVVM 模式不是为了消除代码后台,而是为了关注点分离和可测试性。

WPF 应用程序框架 (WAF)BookLibrary 示例展示了如何在 MVVM 应用程序中使用 CollectionView 进行过滤。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接