如何使用TreeView作为其他控件的绑定源

时间:2017-09-14 07:37:25

标签: wpf binding treeview

考虑一个Tasks类:

TaskID
ParentID
Title
<several other properties>
Description
SubTasks <-- a collection of tasks

首先,我填充一个名为AllTask​​s的Tasks层次结构,然后通过以下方式将其加载到TreeView中:

TaskTree.DataContext = AllTasks

工作正常。现在,当用户从TreeView中单击任务时,我想用Task数据填充其他几个控件。我将只考虑Description属性,因为这足以说明问题。

我的TreeView定义如下:

<TreeView
    x:Name="TaskTree"
    SelectedValuePath="Task">
    <TreeView ItemsSource="{Binding}">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Path=SubTasks}">
                <TextBlock Text="{Binding Path=Title}" />
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>
</TreeView>

应显示用户所选任务的Description属性的TextBox由以下内容定义:

<DockPanel
    DataContext="{Binding ElementName=TaskTree}">
    <TextBox
        x:Name="txtDescription" 
        Text="{Binding Path=SelectedItem.Discussion}"
</DockPanel>

TextBox中没有显示任何内容。我试着设置......

Text="{Binding Path=Discussion}"

......但这也不起作用。我尝试过其他组合,但无济于事。什么有用?

1 个答案:

答案 0 :(得分:1)

您不能在名为&#34; TaskTree&#34;的外部Task中选择任何TreeView。删除外部:

<TreeView ItemsSource="{Binding}" x:Name="TaskTree">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:Task}" ItemsSource="{Binding Path=SubTasks}">
            <TextBlock Text="{Binding Path=Title}" />
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>

...然后尝试绑定到 SelectedItem属性:

<TextBox x:Name="txtDescription" Text="{Binding Path=SelectedItem.Discussion, ElementName=TaskTree}" />