WPF TreeViewItem标头值数据符号之后
-
10-10-2019 - |
题
我有一个TreeView,其内容(Nested TreeViewItems)是通过数据集生成数据集生成的,该数据集似乎可以正常工作。我遇到的问题是,当我尝试操纵Code中的TreeViewItem标头的内容时,标头属性返回DataRowView,即TreeViewItem是由TreeViewItem生成的,而不是像我所期望的那样,是由模板生成的控件。
这是我用来生成TreeViewItems的模板的示例:
<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>
谁能指出我要出错的地方,并建议我如何访问标题复选框(理想情况下,如果可能的话,无需深入研究)?
谢谢,詹姆斯
解决方案
好吧,经过一些搜索,我找到了适当的解决方案。
使用以下代码,您可以在模板中找到命名项目:
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;
}
}
另外,为了使任何可能在数据框浏览中无法解决的人的好处:我在问题中发布的模板不是绑定树景的正确方法。为树的每个级别使用层次结构直属板。层次datatemplate的直接内容将指定每个子树的标头内容,并设置itempssource和itemTemplate属性,使您能够绑定和格式化子树子女:例如:
<HierarchicalDataTemplate x:Key="templateName" ItemsSource="{Binding Path=someCollection}" ItemTemplate="{StaticResource someOtherTemplate}">
<TextBlock Text="{Binding Path=SomeProperty}" />
</HierarchicalDataTemplate>
我希望其他人会发现此信息有用。
不隶属于 StackOverflow