考虑一个Tasks类:
TaskID
ParentID
Title
<several other properties>
Description
SubTasks <-- a collection of tasks
首先,我填充一个名为AllTasks的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}"
......但这也不起作用。我尝试过其他组合,但无济于事。什么有用?
答案 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}" />