【问题标题】:How to create collection view source in code behind for wpf app如何在 wpf 应用程序的代码中创建集合视图源
【发布时间】:2012-01-12 17:27:01
【问题描述】:

我有以下代码

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            var entities  = new DemoEntities();
            var depts = entities.Depts.ToList(); // entity framwork dept table
            CollectionViewSource cvs = (CollectionViewSource)CollectionViewSource.GetDefaultView(depts);
        }
    }

我的意图是将此集合绑定到 XAML 中的以下 windows 资源

<Window.Resources>
        <CollectionViewSource x:Key="Departments"/>
    </Window.Resources>

使用

CollectionViewSource collectionViewSource = this.FindResource("Departments") as CollectionViewSource;

但是在执行以下代码行时

CollectionViewSource cvs = (CollectionViewSource)CollectionViewSource.GetDefaultView(depts);

它正在抛出一个异常,并且该异常的内部异常正在跟随

{"Unable to cast object of type 'System.Windows.Data.ListCollectionView' to type 'System.Windows.Data.CollectionViewSource'."}

有人可以通过提供如何使用后面的代码创建 CollectionViewSource 来帮助我吗?

【问题讨论】:

    标签: c# .net wpf xaml observablecollection


    【解决方案1】:

    CollectionViewSource.GetDefaultView(depts) 返回一个ICollectionView。 CollectionViewSource 主要是根据提供的集合来决定使用什么类型的ICollectionView。

    如果你真的想创建一个CollectionViewSource,你可以这样做:

    var collectionViewSource = new CollectionViewSource();
    collectionViewSource.Source = depts;
    

    不过,我相信您想要实现的目标可以以更好的方式完成。例如:

    var collectionViewSource = this.FindResource("Departments") as CollectionViewSource;
    collectionViewSource.Source = depts;
    

    【讨论】:

      【解决方案2】:

      CollectionViewSource.GetDefaultView 方法返回一个 ICollectionView

      ICollectionView icv = CollectionViewSource.GetDefaultView(dg1.ItemsSource);
      

      但是,如果您绑定到从 IList 继承的集合(在您的情况下是这样),它也可以转换为更强大的类型...

      ListCollectionView icv = CollectionViewSource.GetDefaultView(dg1.ItemsSource) 
                      as ListCollectionView;
      

      这是编译器想要做但不能做的事情。因此错误。因此,将您的“cvs”更改为适当的类型...

      ICollectionView 或 ListCollectionView...取决于您想要对结果做什么...

      注意:Bea Stolnitz 关于绑定到 CollectionView 的开创性博客文章位于 her old blog

      【讨论】:

      • 嗨@Garry,一旦创建ListCollectionView,我们如何将它分配回windows资源,因为该资源的类型是CollectionViewSource
      猜你喜欢
      • 2014-10-17
      • 2011-06-03
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 2010-10-05
      • 2020-08-03
      相关资源
      最近更新 更多