2010-12-02 7 views
0

Ich habe eine Listbox mit Buttons gefüllt. Wenn auf die Schaltflächen geklickt wird, wird eine neue Seite angezeigt. Aber ich möchte den ausgewählten Index der Listbox haben, wenn ich auf die Schaltfläche klicke. Aber das Listboxitem wird nie ausgewählt. Gibt es eine Möglichkeit, den Index, wo die Schaltfläche liegt, zu erhalten, indem Sie auf die Schaltfläche klicken. Danke für die Hilfe.Wie bekomme ich einen Listbox-Index?

Beispiel Code

<ListBox> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
       <Button Click="ViewDetail_Click" Content="{Binding Path=Area}"></Button> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    </ListBox> 

Antwort

4

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.)

+0

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

+0

OK. Obwohl ich nicht sicher war, warum Sie es brauchten, zeigt mein Beispiel, wie man den Index trotzdem bekommt - funktioniert das für Sie? –

+0

ja es hat sehr gut funktioniert. – Tan