WPF ListBoxItems mit DataTemplates - Wie referenziere ich das CLR-Objekt, das an ListBoxItem gebunden ist, innerhalb der DataTemplate?

8

Ich habe eine ListBox, die an ein ObservableCollection gebunden ist.

Jedes ListBoxItem wird mit DataTemplate angezeigt. Ich habe eine Schaltfläche in meinem DataTemplate , die, wenn sie angeklickt wird, einen Verweis auf das Mitglied von ObservableCollection benötigt, für das sie Teil des DataTemplate ist. Ich kann die Eigenschaft ListBox.SelectedItem nicht verwenden, da das Element beim Klicken auf die Schaltfläche nicht ausgewählt wird.

Also entweder: Ich muss herausfinden, wie man ListBox.SelectedItem richtig einstellt, wenn die Maus schwebt oder wenn auf die Schaltfläche geklickt wird. Oder ich muss einen anderen Weg finden, einen Verweis auf das CLR-Objekt zu erhalten, das an die ListBoxItem gebunden ist, zu der die Schaltfläche gehört. Die zweite Option scheint sauberer zu sein, aber beides ist wahrscheinlich in Ordnung.

Vereinfachtes Codesegment:

XAML:

%Vor%

C #:

%Vor%     
John Noonan 19.04.2009, 20:01
quelle

2 Antworten

11

Im Allgemeinen werden Leute an einem CLR-Objekt interessiert sein, das direkt an die ListBoxItem gebunden ist, nicht an die tatsächliche ListBoxItem . Wenn Sie zum Beispiel eine Liste von Beiträgen hätten, könnten Sie Ihre vorhandene Vorlage verwenden von:

%Vor%

und in deinem Code-behind entspricht dein Button DataContext deinem DataTemplate DataContext . In diesem Fall ein Post .

%Vor%     
bendewey 19.04.2009, 20:13
quelle
3

Sie haben mehrere Möglichkeiten, je nachdem, was Sie tun müssen.

Zunächst lautet die Hauptfrage: "Warum brauchen Sie das"? Meistens ist es nicht sinnvoll, einen Verweis auf den Container zu verwenden (nicht zu sagen, dass dies der Fall ist, aber Sie sollten es näher ausführen). Wenn Sie Ihre Listbox binden, gibt es selten einen Fall dafür.

Zweitens können Sie das Element aus der Listbox abrufen, indem Sie myListBox.ItemContainerGenerator.ContainerFromItem() verwenden, sofern Ihre Listbox den Namen MyListBox hat. Über den sender-Parameter können Sie beispielsweise den tatsächlichen Artikel abrufen, für den die Vorlage erstellt wurde (wobei XXX für den Typ Ihrer datengebundenen Daten steht):

%Vor%

Sie finden ein Beispiel für einen Blog . Sie verwendet die Index-Methode, aber die Item-Methode ist ähnlich.

    
Denis Troller 19.04.2009 20:22
quelle