2016-09-15 6 views
1

WPF에서 CollectionViewSource의 필터링, 그룹화 및 정렬에 대한 논의가 많으며 "MVVM"이 아니라 (특히 코드 숨김으로 필터를 추가 할 때) 무엇이 "실용적인 MVVM"이 아닙니다.XAML에서 정의한 CollectionViewSource를 ViewModel에 바인딩합니다.

비동기 ObservableCollection과 함께 SynchronizationContext을 사용하려면 View (Dispatcher 스레드에서)에서 인스턴스화 한 인스턴스가 아닌 인스턴스화 된 CollectionViewSource가 필요합니다. 이 모델은 XAML에서 정의하지 않고 필터, 그룹 및 정렬 설명자를 코드에서 추가하기 위해 모델에 CollectionViewSource에 대한 액세스가 필요합니다. 이 목적을 위해 XAML에서 선언 한 CollectionViewSource 개체를 ViewModel에 다시 바인딩하는 방법을 찾고 싶습니다. 이런 식으로 뭔가가 :

물론
<UserControl.Resources> 
    <CollectionViewSource 
     IsLiveFilteringRequested="True" 
     x:Name="collectionViewSource" 
     x:Key="collectionViewSource" 
     Source="{Binding DataContext.myCollection, IsAsync=True}" 
     Binding="{Binding DataContext.myCollectionViewSourceProperty, Mode=OneTime}" /> 
    </UserControl.Resources> 

의 CollectionViewSource은 "바인딩"속성이 없습니다, 소스는 ObservableCollection에 가리켜 야합니다.

이 방법이 있습니까?

답변

1

내 초기 생각은 CollectionViewSource을 정의하고 -XAML로 인스턴스화 한 다음 첨부 된 속성 형식을 사용하여 필터, 그룹 및 속성을 뷰 모델의 값에 바인딩합니다. 물론 충분히 이것은 이미 완료되었습니다 (그리고 작동하는 것 같습니다) here 찾을 수 있습니다.

CollectionViewSource은 Dispatcher 스레드에서 인스턴스화되지만보기 모델에서 제어 할 수 있으므로 (디스패처 스레드에서도 바운드 속성 변경이 발생하는지 확인해야합니다) 문제가 해결됩니다.