Seltsames Verhalten WPF-TreeView ItemContainerStyle und ItemTemplate
Mir fiel nur gerade ein seltsames Verhalten von WPF-TreeView. Ich habe sowohl ItemContainerStyle zu binden "IsSelected" von meinem ViewModel und ein ItemsTemplated für benutzerdefinierte Anzeige meiner Daten. Aber jetzt kann der Benutzer nicht ändern Sie den ausgewählten Knoten mehr. Für Testzwecke erstellte ich eine ähnliche Benutzeroberfläche mit ListView und Expander. Diese version funktioniert als genehmigt. Irgendwelche Tipps warum TreeView nicht?
<TreeView ItemsSource="{Binding ElementName=frame, Path=list}">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}" >
<Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}"/>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate>
<TreeViewItem Header="{Binding}">
<TextBlock Text="{Binding Path= Item.SomeData}"/>
</TreeViewItem>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
EDIT: Meine Daten sind nicht hierarchische. Ich will einfach nur, um den "Zusammenbruch" - Funktion auf der Anzeige eine Liste. Element.SomeData ist keine Liste. Anzeige der Daten ist, wie gewünscht. Nur die Auswahl per Maus nicht!
alt-text http://img682.imageshack.us/img682/3702/bildy.png
- Was in meiner Antwort nicht für Sie arbeiten? Oder hast du dein problem gelöst schon?
- Sie legte einige Mühe in deine Antwort. Aber es ist nicht wirklich die Lösung meines Problems. Ich bearbeitet meine Frage, um mein problem besser verständlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
TreeViews anders funktionieren. Die Elemente in einem HierarchicalDataTemplate sind TreeViewItems und jede Kontrolle, die Sie angeben, innerhalb der HierarchicalDataTemplate-Funktion Header. Also, im Grunde geben Sie an, dass die Elemente in Ihre TreeView sind TreeViewItems mit TreeViewItems als Ihre Header! Stattdessen versuchen Sie dies:
EDIT: konnte ich nicht reproduzieren einer Datenquelle, erzeugt die Eigenschaften, die Sie wollen, zu binden, also schrieb ich ein paar simple code meiner eigenen, die zeigt, wie es funktioniert. Hoffentlich werden Sie in der Lage sein, um es an Ihre Bedürfnisse anpassen: