Frage

Ich habe eine TreeView, dessen Inhalt (verschachtelte TreeViewItems) aus einem Datensatz über Datenbindung erzeugt, die alle zu funktionieren scheinen. Das Problem, das ich in laufen lasse, ist, dass wenn ich versuche, und die Inhalte des TreeViewItem Header im Code zu manipulieren, die Header-Eigenschaft gibt die DataRowView, dass die TreeViewItem aus und nicht erzeugt wird, wie ich es erwartet habe, die Kontrolle durch die Vorlage erzeugt.

Hier ist ein Beispiel für die Vorlage, um die TreeViewItems zu generieren Ich bin mit:

    <DataTemplate x:Key="seasonTreeViewItemTemplate">
        <TreeViewItem>
            <TreeViewItem.Header>
                <CheckBox Content="{Binding Path=Row.SeasonID}" Tag="{Binding}" ToolTip="{Binding Path=Row.Title}" IsEnabled="{StaticResource seasonPermitted}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" />
            </TreeViewItem.Header>

            <TreeViewItem Header="Championships" ItemTemplate="{StaticResource championshipTreeViewItemTemplate}">
                <TreeViewItem.ItemsSource>
                    <Binding Path="Row" ConverterParameter="FK_Championship_Season">
                        <Binding.Converter>
                            <local:RowChildrenConverter />
                        </Binding.Converter>
                    </Binding>
                </TreeViewItem.ItemsSource>
            </TreeViewItem>
        </TreeViewItem>
    </DataTemplate>

Kann mir jemand Punkt, wo ich falsch gehe und mir sagen, wie die Header-Kontrollkästchen für den Zugriff auf (idealerweise ohne in die VisualTree einzutauchen wenn möglich)?

Danke, James

War es hilfreich?

Lösung

Nun, nach einiger Suche habe ich eine adäquate Lösung für das Problem gefunden.

den folgenden Code verwenden, können Sie benannte Elemente in der Vorlage finden:

if (treeViewItem != null)
{
        //Get the header content presenter.
        ContentPresenter header = treeViewItem.Template.FindName("PART_Header", treeViewItem) as ContentPresenter;

        if (header != null)
        {
            //Find a CheckBox called "checkBoxName"
            CheckBox cb = treeViewItem.HeaderTemplate.FindName("checkBoxName", header) as CheckBox;
        }
} 

Auch zum Nutzen der alle anderen, die nicht allzu kann bis auf Datenbindung treeviews clued werden: Die Vorlage ich in meiner Frage gestellt ist nicht der richtige Weg, um die Bindung eines treeview zu gehen. Verwenden Sie einen HierarchicalDataTemplate für jede Ebene des Baums. Der direkte Inhalt der HierarchicalDataTemplate des Inhalt des Headers jeder Teilstruktur angeben und die Itemssource und ItemTemplate Einstellung Eigenschaften werden Sie zu binden lassen und die Teilbäume Kinder formatiert werden, zum Beispiel:

<HierarchicalDataTemplate x:Key="templateName" ItemsSource="{Binding Path=someCollection}" ItemTemplate="{StaticResource someOtherTemplate}">
    <TextBlock Text="{Binding Path=SomeProperty}" />
</HierarchicalDataTemplate>

Ich hoffe, dass jemand anderes diese Informationen nützlich finden werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top