Angehängtes Verhalten zum Ausführen eines Befehls für ListViewItem

8

Ich versuche, ein angefügtes Verhalten zu verwenden, um einen Befehl in meinem ViewModel auszuführen, wenn der Benutzer auf das Listenelement doppelklickt.

Ich habe eine Reihe von Artikeln zu diesem Thema gelesen und habe versucht, eine einfache Testanwendung zu erstellen, habe aber immer noch Probleme, z. Ein Doppelklick-Ereignis von einem WPF auslösen ListView-Objekt mit MVVM

Mein einfacher Test ViewModel hat 2 Sammlungen, eine, die eine Liste von Strings zurückgibt und die andere, die eine Liste von ListViewItem-Typen zurückgibt

%Vor%

Hier ist die angehängte Eigenschaft, die wie andere Beispiele aussieht:

%Vor%

In meinem Hauptfenster habe ich den Stil definiert, der das angehängte Verhalten festlegt und an den Foo-Befehl bindet

%Vor%

Funktioniert einwandfrei, wenn ListViewItems definiert sind:

%Vor%

Dies funktioniert auch, wenn es an die Liste vom Typ ListViewItem gebunden ist:

%Vor%

Aber das ist nicht:

%Vor%

Im Ausgabefenster sehen Sie den Fehler, aber es ist schwer zu verstehen, was falsch ist.
System.Windows.Data Fehler: 39: BindingExpression path error: 'Foo' Eigenschaft nicht gefunden auf 'Objekt '' 'String' (HashCode = 785742638) '. BindingExpression: Pfad = Foo; DataItem = 'String' (HashCode = 785742638); Zielelement ist 'ListViewItem' (Name = ''); Zieleigenschaft ist 'DoubleClick' (geben Sie 'ICommand' ein)

Meine Frage ist also: Wie kann man den Befehl korrekt an jedes ListViewItem anschließen, wenn Sie Ihre ListView an eine Liste von Model-Objekten binden?

Danke.

    
Paul Taylor 07.01.2011, 20:17
quelle

1 Antwort

8

Das Problem ist, dass DataContext für Binding die Zeichenfolge ist. Da es keine Foo -Eigenschaft der String-Klasse gibt, erhalten Sie einen Fehler. In den anderen Fällen tritt dies nicht auf, weil sie ihre DataContext vom übergeordneten Element erben (dies gilt nicht für automatisch generierte Container für Datenelemente - ihr DataContext ist das Datenelement).

Wenn Sie Ihre Bindung ändern, um die ListView DataContext von Eltern zu verwenden, sollte es funktionieren:

%Vor%     
Abe Heidebrecht 07.01.2011, 20:25
quelle

Tags und Links