2012-01-12 20 views
3

我有下面的代碼如何在代碼中創建集合查看源代碼背後的WPF應用程序

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後面創建?

回答

6

CollectionViewSource.GetDefaultView(depts)返回ICollectionViewCollectionViewSource主要是根據所提供的集合來確定使用何種類型的ICollectionView的手段。

如果你實在想不過來創建一個CollectionViewSource,你也許可以做到這一點,像這樣:

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

我卻相信你正在努力實現以更好的方式可以做什麼。例如:

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

感謝代碼,它解決了這個目的。 – Elangesh 2012-01-13 11:28:05

1

的CollectionViewSource.GetDefaultView方法返回的ICollectionView

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

但如果你綁定到自IList(其中它在你的情況)繼承了一個集合,它也可以是投到更強大的類型...

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

這是編譯器想要做什麼,但不能。因此錯誤。因此,改變你的「CVS」是合適的類型......

ICollectionView或ListCollectionView的...這取決於你想要的結果,該怎麼辦...

注:衣Stolnitz的開創性博客條目上綁定到一個CollectionView是在her old blog

+0

Hi @Garry,一旦'ListCollectionView'被創建,我們如何將它分配回窗口資源,因爲該資源的類型是'CollectionViewSource' – Elangesh 2012-01-13 11:12:05

相關問題