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% 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:
und in deinem Code-behind entspricht dein Button
DataContext
deinem DataTemplate
DataContext
. In diesem Fall ein Post
.
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):
Sie finden ein Beispiel für einen Blog . Sie verwendet die Index-Methode, aber die Item-Methode ist ähnlich.
Tags und Links wpf listbox datatemplate listboxitem