2016-06-19 3 views
3

MainWindow.xaml (View) 및 MainWindowViewModel.cs (ViewModel) 있습니다. 내 프로그램에서 시작시 비동기 로딩 데이터에 대한 사용자 정의 클래스가 Worklist.Result (observablecollection)입니다. 이 순간 나는 사용자 정의 필터링 데이터를 사용해야합니다. xaml에서 CollectionViewSource를 모두 만들면 완벽하게 표시되지만 CollectionViewSource에 Filter 이벤트를 바인딩 할 수 없습니다. 좋아, 그럼 내가 CollectionView 뒤에 코드가 필요해 ...하지만 마침내 DataGrid는 데이터를 표시하지 않는다. (바인딩 오류가 없다. CollectionViewSource는 모든 레코드를 가지고있다.) 왜? 예제 1 : (XAML로 만든 CollectionViewSource 필터링 제외) 모두 정상입니다!
MainWindow.xamlCollectionViewSource 코드 숨김 바인딩의 이상한 동작 MVVM

... 
     <xdg:DataGridCollectionViewSource x:Key="DataItems" 
           Source="{Binding WorkList.Result}" 
     <xdg:DataGridCollectionViewSource.GroupDescriptions> 
      <xdg:DataGridGroupDescription PropertyName="Date"/> 
     </xdg:DataGridCollectionViewSource.GroupDescriptions> 
    </xdg:DataGridCollectionViewSource>--> 
... 
    <xdg:DataGridControl VerticalAlignment="Stretch" Background="White" ItemsSource="{Binding Source={StaticResource DataItems}}" ... </xdg:DataGridControl> 

예 2 : (숨김 생성 필터링하여 w/o CollectionViewSource)를 데이터 그리드에서 NO RECORDS)!

MainWindow.xaml

<xdg:DataGridControl VerticalAlignment="Stretch" Background="White" ItemsSource="{Binding DataItems}" ... </xdg:DataGridControl> 

MainWindowViewModel .cs

... 
public ICollectionView DataItems { get; private set; } 
... 
private void WorkList_PropertyChanged(object sender, PropertyChangedEventArgs e) 
     { 
       DataItems = CollectionViewSource.GetDefaultView(WorkList.Result); 

     } 

그런 다음 WorkList_PropertyChanged 이벤트가 CollectionViewSource의 모든 데이터에 발생했지만 DataGrid에는 없습니다. 누군가이 문제를 도울 수 있습니까?

+1

당신은 속성 DataItems을위한하여 PropertyChanged를 제기 했습니까? –

+0

오! 나는 CollectionViewSource가 자동 RaisePropertyChanged (ObservableCollection처럼)를 구현한다고 생각한다. 실례합니다. – user1576474

+0

물론 그렇긴하지만 DataItems 속성을 변경하면 해당 변경 사항을 알려야합니다. CVS는 어떤 속성을 지정했는지 알지 못하므로 -이 자체로 통지 할 수 없습니다 o) –

답변

1

WPF 엔진이 DataItems가 새로운 값으로 업데이트되었음을 ​​알기 위해서는 DataItemsPropertyChanged을 알릴 필요가 있습니다.

CollectionViewSource.GetDefaultView(WorkList.Result);의 결과가 ObservableCollection 인 경우에도 DataItems가 업데이트되었음을 ​​알리는 알림이 없으므로보기에서 알 수 없습니다.

는에서 INotifyPropertyChanged를 구현, 당신의 MainWindowViewModel 확인하고 당신은 할 수 있습니다 :

... 
private ICollectionView _dataItems; 
public ICollectionView DataItems { 
    get 
    { 
    return this._dataItems; 
    } 
    private set 
    { 
    this._dataItems = value; 
    this.OnPropertyChanged("DataItems"); // Update the method name to whatever you have 
    } 
... 
+2

이 상용어를 제거하려면 https://www.nuget.org/packages/PropertyChanged.Fody/ –

+0

@ SirRufo, 정보 주셔서 감사합니다 – omerts