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