2012-01-12 4 views
3

나는 다음 한 코드에 대한 코드의 수집 소스보기를 만들려면 내 의도는 사용 XAML어떻게 뒤에 WPF 응용 프로그램

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

에 다음과 같은 윈도우 자원을이 컬렉션을 결합하는 것입니다

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); 
     } 
    } 

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

그러나 다음 코드 줄을 실행하는 동안

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

는 예외와 그 예외의 내부 예외가 어떤 하나 CollectionViewSource 뒤에 코드를 사용하여 만드는 방법을 제공하여이 나를 도울 수

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

을 따르고을 던지고있다?

답변

6

CollectionViewSource.GetDefaultView(depts)ICollectionView을 반환합니다. CollectionViewSource은 주로 제공되는 컬렉션에 따라 사용할 유형을 결정하는 수단입니다 (ICollectionView). 당신이 정말로 그러나 CollectionViewSource를 작성하려는 경우

, 당신과 같이 그것을 할 아마 수 :

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

그러나 나는 당신이 더 나은 방법으로 수행 할 수 달성하려고하는 것을 믿는다. 예를 들어 :

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

입니다. 코드를 사용해 주셔서 감사합니다. – Elangesh

1

CollectionViewSource.GetDefaultView 방법은 ICollectionView에에게

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

를 반환하지만 (이것은 귀하의 경우 않습니다)은 IList에서 상속 컬렉션에 바인딩하는 경우, 그것은 또한 할 수있다 더 강력한 형식으로 캐스트 ...

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

컴파일러는 무엇을하고 싶어하지만 할 수 없습니다. 따라서 오류. 베아 Stolnitz의 정액 블로그 항목에 : 그럼 적절한 유형의

ICollectionView에 또는 ListCollectionView를 ... 당신이 결과로 수행 할 작업에 따라 ...

참고로 당신의 'CVS'을 변경 CollectionView에 바인딩은 her old blog

+0

안녕하세요. @Garry, 일단'ListCollectionView'가 만들어지면 그 리소스의 유형이'CollectionViewSource'이기 때문에 어떻게 windows 자원에 다시 할당합니까? – Elangesh