wpfxamlbinding

XAML Binding to a CollectionViewSource property on a ViewModel


I have a simple ViewModel like:

public class MainViewModel 
{
    ObservableCollection<Project> _projects;
    public MainViewModel() 
    {
        // Fill _projects from DB here...
        ProjectList.Source = _projects;
        ProjectList.Filter = ...;
    }

    public CollectionViewSource ProjectList { get; set; }
}

I set the window's DataContext to a new instance of that ViewModel in the constructor:

public MainWindow() {
    this.DataContext = new MainViewModel();
}

Then in the Xaml I am attempting to bind the ItemsSource of a ListBox to that ProjectList property.

Binding just ItemsSource like so doesn't work:

<ListBox ItemsSource="{Binding ProjectList}" ItemTemplate="..." />

But if I first rebase the DataContext this works:

<ListBox DataContext="{Binding ProjectList}" ItemsSource="{Binding}" ItemTemplate="..." />

Shouldn't the first method work properly? What might I be doing wrong?


Solution

  • If you are using CollectionViewSource you need to bind ItemsSource to ProjectList.View instead of ProjectList. That should solve your problem.