der Datenkontext der Taste wird das Quelldatenelement entsprechend das Listenelement enthalten. Sie haben nicht gezeigt, was Ihr ItemsSource
für die Liste ist, damit ich nicht genau zeigen kann, welchen Code Sie benötigen würden. Aber so etwas wie dieses:
ObservableCollection<MyDataItem> items = new ObservableCollection<MyDataItem>();
...
myList.ItemsSource = items;
...
private void ViewDetail_Click(object sender, RoutedEventArgs e)
{
Button b = (Button) sender;
MyDataItem detailItem = (MyDataItem) b.DataContext;
int itemIndex = items.IndexOf(detailItem);
}
Natürlich, wenn der Grund, warum Sie in erster Linie für den Index sind gefragt ist, weil Sie halten die entsprechenden Datenelement erhalten möchten, brauchen Sie nicht wirklich den Index überhaupt - der Artikel ist schon da im Datenkontext.
Übrigens würde ich hier keinen ListBox
verwenden. Die Hauptsache ListBox
bringt die Partei ist Auswahl, aber indem Sie Schaltflächen als die Elemente, Sie besiegen das - wie Sie bereits festgestellt haben, behandelt die Schaltfläche die Maus-Eingabe, bevor das Listenfeld hat eine Chance, das heißt dass Sie die Elemente nicht wirklich auswählen können. An welchem Punkt, warum haben Sie eine ListBox
? Eine Basis ItemsControl
macht wahrscheinlich mehr Sinn. (Wrapped in einem ScrollViewer
, wenn Sie scrollen müssen.)
Der Grund, warum ich den ausgewählten Index möchte, ist, weil wenn ich auf die Schaltfläche klicken eine neue Seite angezeigt wird. Aber wenn ich auf die vorherige Schaltfläche auf der neuen Seite klicke. Ich will es zeigen, wo ich das letzte Mal auf der Listbox war. – Tan
OK. Obwohl ich nicht sicher war, warum Sie es brauchten, zeigt mein Beispiel, wie man den Index trotzdem bekommt - funktioniert das für Sie? –
ja es hat sehr gut funktioniert. – Tan