我有一个简单的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中,我试图将ListBox的ItemsSource绑定到该ProjectList属性。
像这样绑定ItemsSource不起作用:
<ListBox ItemsSource="{Binding ProjectList}" ItemTemplate="..." />
但是,如果我首先重新定义DataContext,那么它可以工作:
<ListBox DataContext="{Binding ProjectList}" ItemsSource="{Binding}" ItemTemplate="..." />
第一种方法不应该正常工作吗?我可能做错了什么?
答案 0 :(得分:16)
如果您使用CollectionViewSource
,则需要将ItemsSource
绑定到ProjectList.View
而不是ProjectList
。这应该可以解决你的问题。
答案 1 :(得分:0)
从你提供的第一种方法应该完美的工作。魔鬼潜伏在某个地方。
PS:也许你没有为帖子大小指定INotifyPropertyChanged
接口的实现,但在制作时要小心。如果你不实现它,很容易得到memory leak。