如何在wpf app后面的代码中创建集合视图源
我有以下代码
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中将此集合绑定到以下窗口资源
运用
CollectionViewSource collectionViewSource = this.FindResource("Departments") as CollectionViewSource;
但是在执行以下代码行时
CollectionViewSource cvs =(CollectionViewSource)CollectionViewSource.GetDefaultView(depts);
它抛出一个exception,并且该exception的内部exception正在跟随
{"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);
但是如果你绑定到一个inheritance自IList的集合(它在你的情况下会这样做),它也可以被强制转换为更强大的类型……
ListCollectionView icv = CollectionViewSource.GetDefaultView(dg1.ItemsSource) as ListCollectionView;
这是编译器想要做的,但不能。 因此错误。 所以改变你的’cvs’是合适的类型……
ICollectionView或ListCollectionView …取决于你想对结果做什么…
注意:Bea Stolnitz关于绑定到CollectionView的开创性博客文章在她的旧博客上