Reputation: 42227
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
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
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