CollectionViewSource

CollectionViewSource을를는 CollectionView 클래스 또는 CollectionView에서 파생된 클래스에 대한 프록시입니다.CollectionViewSource는 XAML 코드에서를 이러한 설정을 기본 보기로 전달하는 일반적으로 사용되는 CollectionView 속성을 설정할 수 있습니다. CollectionViewSource에는 실제 보기를 보유하는 View 속성 및 원본 컬렉션을 보유하는 Source 속성이 있습니다.

컬렉션 뷰는 기본 소스 컬렉션 자체를 조작할 필요 없이 정렬, 필터 및 그룹화 쿼리를 기반으로 컬렉션을 탐색하고 표시하는 데 사용할 수 있는 바인딩 소스 컬렉션의 최상위 계층으로 간주할 수 있습니다.INotifyCollectionChanged 인터페이스가 소스 컬렉션에서 구현될 경우 CollectionChanged 이벤트에서 발생되는 변경 내용은 뷰로 전파됩니다.

뷰는 기본 소스 컬렉션을 변경하지 않으므로 각 소스 컬렉션에 여러 개의 뷰를 연결하여 사용할 수 있습니다.예를 들어 Task 개체의 컬렉션을 사용할 수 있습니다.또한 뷰를 사용하면 동일한 데이터를 여러 가지 다른 방식으로 표시할 수 있습니다.예를 들어 페이지 왼쪽에 우선 순위별로 정렬된 작업을 표시하고 오른쪽에 영역별로 그룹화된 작업을 표시할 수 있습니다.

자세한 내용은 데이터 바인딩 개요에서 컬렉션에 바인딩 단원을 참조하십시오.

한마디로 상태변경이 일어나면 그 상태를 알려준다.

http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=KO-KR&k=k(SYSTEM.WINDOWS.DATA.COLLECTIONVIEWSOURCE);k(COLLECTIONVIEWSOURCE);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&rd=true

사용했을때와 안했을때 차이점

 

image

위와  같은 화면을 구현 할 꺼다

DataGrid 에서 행을 선택하면 아래하단에 데이터가 자동으로 바인딩된다.

 

데이터 개체 만들기

image


비주얼스튜디오2010 에서 툴을 이용해서 만들면?

image

image

아까 위에서 만든 개체 선택

image

이렇게 나타난다.

위에서 만들어진 데이터 소스를 끌어주면 끝!

소스를 보면 리소스가 추가되었고

CollectionViewSource 형식으로 만들어져 있다.

image

그리드 데이터 컨텍스트에서 받는다

image

image

비하인드 코드 처리

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            //가짜 데이터 만들기
            List<Customer> list = new List<Customer>();
            list.Add(new Customer { Age = 19, Name = "kojaedoo" });
            list.Add(new Customer { Age = 129, Name = "kojaedoo1" });
            list.Add(new Customer { Age = 49, Name = "kojaedoo2" });
            list.Add(new Customer { Age = 59, Name = "kojaedoo3" });
            list.Add(new Customer { Age = 69, Name = "kojaedoo4" });
            list.Add(new Customer { Age = 89, Name = "kojaedoo5" });



            //비주얼스트디오에서 자동으로 만들어준 코드 입니다.
            System.Windows.Data.CollectionViewSource customerViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("customerViewSource")));
            // CollectionViewSource.Source 속성을 설정하여 데이터를 로드합니다.
            customerViewSource.Source = list;                    
            
            
        }
끝!

수동(?)으로 할려면?

그리드에 있던 바인딩을 제거한다.

image

CollectionViewSource 만들어서 끼워주고 cv 를 바인딩합니다.

image

아까 그리드에다가 바인딩 해 주면된다.

 

만약 CollectionViewSource 사용하지 않는다면?

image

image

나이 49/ kojaedoo2 를 선택해도 아래의 컨트롤에는 반영이 되질 않는다.

정상적이라면 아래 박스에는 kojaedoo2 와 49가 바인딩 되어야한다.

+ Recent posts