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 я пытаюсь связать ItemsSource ListBox к тому свойству ProjectList.

Привязка просто ItemsSource как так не работает:

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

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

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

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

12
задан joshperry 10 June 2010 в 16:55
поделиться

2 ответа

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

18
ответ дан 2 December 2019 в 19:30
поделиться

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

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

0
ответ дан 2 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: