如何在wpf app后面的代码中创建集合视图源

Ela*_*esh 4 .net c# wpf xaml observablecollection

我有以下代码

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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的目的是在XAML中将此集合绑定到以下窗口资源

<Window.Resources>
        <CollectionViewSource x:Key="Departments"/>
    </Window.Resources>
Run Code Online (Sandbox Code Playgroud)

运用

CollectionViewSource collectionViewSource = this.FindResource("Departments") as CollectionViewSource;
Run Code Online (Sandbox Code Playgroud)

但是在执行以下代码行时

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

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

{"Unable to cast object of type 'System.Windows.Data.ListCollectionView' to type 'System.Windows.Data.CollectionViewSource'."}
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*oid 9

CollectionViewSource.GetDefaultView(depts)返回一个ICollectionView.CollectionViewSource主要是ICollectionView根据所提供的集合确定使用何种类型的方法.

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

var collectionViewSource = new CollectionViewSource();
collectionViewSource.Source = depts;
Run Code Online (Sandbox Code Playgroud)

但我确实相信你想要实现的目标可以更好地完成.例如:

var collectionViewSource = this.FindResource("Departments") as CollectionViewSource;
collectionViewSource.Source = depts;
Run Code Online (Sandbox Code Playgroud)