XAML 绑定到 ViewModel 上的 CollectionViewSource 属性

问题描述 投票:0回答:2

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

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

wpf xaml binding
2个回答
19
投票

如果您使用

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


0
投票

根据您提供的信息,第一种方法应该可以完美工作。魔鬼潜伏在细节的某个地方。

PS:也许您出于帖子大小的原因没有指定

INotifyPropertyChanged
接口的实现,但在制作时要小心。如果你不实现它,很容易出现内存泄漏

© www.soinside.com 2019 - 2024. All rights reserved.