【发布时间】:2013-04-14 16:17:28
【问题描述】:
我已按照本文的建议将树视图控件绑定到 xml 文档: http://www.codeproject.com/Articles/317766/Displaying-XML-in-a-WPF-TreeView?msg=4546407#xx4546407xx
但是,现在我不知道如何访问所选项目。
这是我的 XAML:
<Window.Resources>
<XmlDataProvider x:Key="xmldata" Source="cats.xml" XPath="/CategoryArray" />
<HierarchicalDataTemplate DataType="Category" ItemsSource="{Binding XPath=./*}">
<StackPanel Orientation="Horizontal">
<TextBlock Margin="5,0,0,0" Text="{Binding XPath=@Name}" Tag="{Binding XPath=@ID}" />
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="CategoryArray" ItemsSource="{Binding XPath=./*}">
<TextBlock Margin="0" Text="eBay Categories" />
</HierarchicalDataTemplate>
</Window.Resources>
<Grid DataContext="{StaticResource xmldata}">
<TreeView Name="treeView1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding}" VirtualizingStackPanel.IsVirtualizing="False" VirtualizingStackPanel.VirtualizationMode="Standard" SelectedItemChanged="treeView1_SelectedItemChanged" />
</Grid>
这似乎不像我想象的那样工作:
private void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
try
{
TreeViewItem selectedItem = treeView1.SelectedValue as TreeViewItem;
categoryName = selectedItem.Name;
categoryID = selectedItem.Tag.ToString();
categoryChosen = true;
}
catch { }
}
由于我使用的是这个分层数据模板和一个文本块,我不知道该怎么做。有任何想法吗?提前致谢。
【问题讨论】:
-
我在这里问了同样的问题:stackoverflow.com/a/9143193/279516。我最终没有使用答案,因为它很复杂。我作弊并使用了代码隐藏文件。希望这会有所帮助。
-
您是如何使用代码隐藏文件的?您的意思是您以编程方式填充树视图而不是使用绑定?
-
“这似乎不像我想象的那样工作。”你可以再详细一点吗?它表现如何?
-
这是我对那个问题/链接的评论:我刚刚又看了一遍代码,看来我作弊了。我在树视图控件中有这个:SelectedItemChanged="TreeView_SelectedItemChanged"。在xaml.cs中,我设置了选中项:((ApplicationServerViewModel)DataContext).SelectedApplicationServer = e.NewValue as ApplicationServer;