如何在wpf应用程序的代码隐藏中创建集合视图源
本文关键字:创建 集合 视图 隐藏 代码 wpf 应用程序 | 更新日期: 2023-09-27 18:20:12
我有以下代码
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 中的以下窗口资源
<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来帮助我吗?
CollectionViewSource.GetDefaultView(depts)
返回一个ICollectionView
。CollectionViewSource
主要是根据所提供的集合来确定使用哪种类型的ICollectionView
的手段。
然而,如果你真的想创建一个CollectionViewSource
,你可能会这样做:
var collectionViewSource = new CollectionViewSource();
collectionViewSource.Source = depts;
然而,我相信你正在努力实现的目标可以用更好的方式来实现。例如:
var collectionViewSource = this.FindResource("Departments") as CollectionViewSource;
collectionViewSource.Source = depts;
CollectionViewSource.GetDefaultView方法返回ICollectionView
ICollectionView icv = CollectionViewSource.GetDefaultView(dg1.ItemsSource);
但是,如果您绑定到从IList继承的集合(在您的情况下是这样做的),它也可以强制转换为更强大的类型。。。
ListCollectionView icv = CollectionViewSource.GetDefaultView(dg1.ItemsSource)
as ListCollectionView;
这是编译器想要做但不能做的。因此出现了错误。所以把你的简历改成合适的类型。。。
ICollectionView或ListCollectionView。。。取决于你想对结果做什么。。。
注意:Bea Stolnitz关于绑定到CollectionView的开创性博客条目位于她的旧博客