XAML привязка к свойству CollectionViewSource в ViewModel

У меня есть простая ViewModel вроде:

public class MainViewModel {
    ObservableCollection<Project> _projects;
    public MainViewModel() {
        // Fill _projects from DB here...
        ProjectList.Source = _projects;
        ProjectList.Filter = ...;
    }

    public CollectionViewSource ProjectList { get; set; }
}

Я установил окно DataContext в новый экземпляр этого ViewModel в конструкторе:

public MainWindow() {
    this.DataContext = new MainViewModel();
}

Затем в Xaml я пытаюсь связать ItemSource ListBox с этим свойством ProjectList.

Связывание просто ItemsSource, как это не работает:

<ListBox ItemsSource="{Binding ProjectList}" ItemTemplate="..." />

Но если я сначала переустанавливаю DataContext, это работает:

<ListBox DataContext="{Binding ProjectList}" ItemsSource="{Binding}" ItemTemplate="..." />

Не должен ли первый метод работать правильно? Что я могу делать неправильно?

Ответ 1

Если вы используете CollectionViewSource, вам нужно привязать ItemsSource к ProjectList.View вместо ProjectList. Это должно решить вашу проблему.

Ответ 2

Из того, что вы предоставили, первый метод должен отлично работать. Дьявол скрывается где-то в деталях.

PS: Возможно, вы не указали реализацию интерфейса INotifyPropertyChanged для размера почты, но будьте осторожны в производстве. Очень легко получить утечку памяти, если вы ее не реализуете.