12 Stimmen

XAML-Bindung an eine CollectionViewSource-Eigenschaft auf einem ViewModel

Ich habe ein einfaches ViewModel wie:

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

    public CollectionViewSource ProjectList { get; set; }
}

Ich setze den DataContext des Fensters auf eine neue Instanz des ViewModel im Konstruktor:

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

Dann in der Xaml versuche ich, die ItemsSource einer ListBox an diese ProjectList-Eigenschaft zu binden.

Einfach nur ItemsSource zu binden, funktioniert nicht:

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

Aber wenn ich zuerst den DataContext neu basiere, funktioniert es:

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

Sollte die erste Methode nicht richtig funktionieren? Was könnte ich falsch machen?

18voto

Joseph Sturtevant Punkte 12816

Wenn Sie Folgendes verwenden CollectionViewSource müssen Sie binden ItemsSource a ProjectList.View anstelle von ProjectList . Das sollte Ihr Problem lösen.

0voto

Anvaka Punkte 15288

Nach dem, was Sie angegeben haben, sollte die erste Methode perfekt funktionieren. Der Teufel lauert irgendwo im Detail.

PS: Vielleicht haben Sie nicht die Implementierung von INotifyPropertyChanged Schnittstelle im Interesse der Postgröße, aber seien Sie vorsichtig in der Produktion. Es ist sehr einfach, eine Speicherleck wenn Sie es nicht umsetzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X