joshperry
joshperry

Reputation: 42227

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?

Upvotes: 12

Views: 18512

Answers (2)

Joseph Sturtevant
Joseph Sturtevant

Reputation: 13360

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

Upvotes: 19

Anvaka
Anvaka

Reputation: 15823

From what you provided the first method should perfectly work. Devil lurks somewhere in details.

PS: Maybe you didn't specify implementation of INotifyPropertyChanged interface in sake of post size, but be careful in production. It's very easy to get a memory leak if you don't implement it.

Upvotes: 0

Related Questions