XAML绑定到ViewModel上的CollectionViewSource属性

时间:2010-06-09 20:00:32

标签: wpf xaml binding

我有一个简单的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="..." />

第一种方法不应该正常工作吗?我可能做错了什么?

2 个答案:

答案 0 :(得分:16)

如果您使用CollectionViewSource,则需要将ItemsSource绑定到ProjectList.View而不是ProjectList。这应该可以解决你的问题。

答案 1 :(得分:0)

从你提供的第一种方法应该完美的工作。魔鬼潜伏在某个地方。

PS:也许你没有为帖子大小指定INotifyPropertyChanged接口的实现,但在制作时要小心。如果你不实现它,很容易得到memory leak