Привязка XAML к свойству CollectionViewSource в ViewModel - PullRequest
11 голосов
/ 10 июня 2010

У меня есть простая 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="..." />

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

Ответы [ 2 ]

17 голосов
/ 10 июня 2010

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

0 голосов
/ 10 июня 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...