У меня есть простой 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="..." />
Разве первый метод не должен работать правильно? Что я мог бы делать неправильно?
Если вы используете CollectionViewSource
, вам необходимо привязать ItemsSource
к ProjectList.View
вместо ProjectList
. Это должно решить вашу проблему.
Из того, что вы предоставили, первый способ должен работать отлично. Дьявол где-то скрывается в деталях.
PS: Возможно, вы не указали реализацию интерфейса INotifyPropertyChanged
ради размера сообщения, но будьте осторожны при производстве. Очень легко получить утечку памяти , если вы ее не реализуете.