【问题标题】:CollectionViews in MVVMMVVM 中的集合视图
【发布时间】:2011-01-05 03:12:15
【问题描述】:

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

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

这通常在 xaml 文件后面的代码中完成。

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

【问题讨论】:

    标签: c# .net wpf mvvm


    【解决方案1】:

    可以在ViewModel中获取CollectionView

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

    2- 假设 DataSource 是一个名为 dt 的 DataTable。

     CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(dt); 
    
     this will give you the CollectionView in ViewModel
    

    【讨论】:

    • 例如,如果我将列表的 ItemsSource 绑定到 SOMEPROPERTY。然后,我可以调用 (CollectionView)CollectionViewSource.GetDefaultView(SOMEPROPERTY)?
    【解决方案2】:

    您需要将 ItemsSource 定义为 ViewModel 中的属性,例如

    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);
    

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      我强烈建议您阅读此链接http://bea.stollnitz.com/blog/?p=387

      【讨论】:

      【解决方案4】:

      在 xaml 文件 (View) 的代码隐藏中检索 CollectionView。 MVVM 模式并不是要消除代码隐藏。这是关于关注点和可测试性的分离。

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

      【讨论】:

        猜你喜欢
        • 2012-05-22
        • 1970-01-01
        • 2017-05-04
        • 1970-01-01
        • 1970-01-01
        • 2018-10-25
        • 1970-01-01
        • 2015-07-14
        • 2021-11-01
        相关资源
        最近更新 更多