Ich schaute über dieses Web und Google und die Lösungen funktionierte nicht für mich.Verwenden des Eltern DataContext (WPF - Dynamic Menu Command Binding)
Ich habe einen Befehl auf dem ViewModel eines UserControl. Nun, die Benutzersteuerung hat ein ItemsControl, das an eine ObservableCollection gebunden ist. Innerhalb der DataTemplate der ItemsControl.ItemTemplate habe ich eine Schaltfläche und ich möchte den Befehl verwenden. Ich kann den Befehl nicht binden, da in der DataTemplate der Datenkontext nicht das ViewModel, sondern ein Objekt der ObservableCollection ist.
Die Frage ist: Wie kann ich die Schaltfläche an den Befehl binden, wenn ein Elternteil Datenkontext verloren?
Ich denke, dass dies eine einfache Lösung haben muss, weil ich denke, dass dies ein häufiges Problem ist.
dieses sceneario Stellen Sie sich vor:
Sie ein ListBox-Element mit einer ObservableCollection als Itemssource haben, so dass Sie für jedes Element in der Auflistung ein Datatemplate in der List-Box verwenden. Nun, Sie möchten das ausgewählte Element löschen und Sie fügen eine Schaltfläche in jeder Zeile für diesen Job ein. Wie machst du das?
In MVP, kann ich dies tun in dem Click-Ereignis der Schaltfläche:
Button but = e.Source as Button;
if (but != null)
Presenter.ActualNote = but.DataContext as Note;
Kurz. Sie senden den Datenkontext der Zeile (das ausgewählte Element) an den Präsentator.
Aber wie kann ich es auf die mvvm-Art tun? Weil ich einen Befehl verwenden muss, aber ich kann den Befehl der Schaltfläche nicht zuweisen, da die Schaltfläche nichts über das ViewModel weiß (wo der Befehl vorhanden ist).
Wie Sie sehen können, muss die Schaltfläche innerhalb der Datenplatte vorhanden sein, dann ist der Datenkontext nicht mehr das ViewModel .... Es gibt einen Grund, warum ich auf den DataContext der Eltern zugreifen muss, um auf den Befehl zuzugreifen.
Ich hoffe, dass Sie mein Problem besser verstehen.
Vielen Dank.
: P. Ich bin auf der Suche nach einer guten Lösung, ohne mvvm: P zu brechen, aber danke, es ist eine Lösung: P –
Ich bin ein SL-Entwickler, also breaking mvvm ist Par für den Kurs :) – geofftnz
Warum SL = MVVM verwendet? – user112889