我遇到了问题。我在我的WPF项目中使用TreeView来可视化我的XML数据。 TreeView位于UserControl中并链接到主网格。问题是,当我在弹出窗口中编辑我的XML数据时,我无法找到treeView(按名称元素)来刷新它。
请帮帮我。
谢谢
WPF MainWindow:
...
...
<Grid>
<uc:UserControlTreeView/>
</Grid>
...
...
用户控件:
<UserControl x:Class="UserControlTreeView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<UserControl.Resources>
<XmlDataProvider x:Key="MyList" x:Name="MyList" Source="d:/a/library.xml" XPath="Libraries/*"/>
<HierarchicalDataTemplate DataType="Library" ItemsSource="{Binding XPath=*}">
<TextBlock Text="{Binding XPath=@Name}"></TextBlock>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="Batch" ItemsSource="{Binding XPath=*}">
<TextBlock Text="{Binding XPath=@Name}"></TextBlock>
</HierarchicalDataTemplate>
</UserControl.Resources>
<TreeView x:Name="libraryTree" VerticalAlignment="Top" AllowDrop="True" TreeViewItem.Expanded="TreeViewItem_Expanded" ItemsSource="{Binding Source={StaticResource MyList}}">
<TreeView.Resources>
<ContextMenu x:Key="TestMenu">
</ContextMenu>
</TreeView.Resources>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="False"/>
<EventSetter Event="PreviewMouseRightButtonDown" Handler="OnPreviewMouseRightButtonDown" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
</UserControl>
和pupup窗口的代码:
XmlElement root = docx.DocumentElement; XmlNode element = root.SelectSingleNode(“/ Libraries / Library [@ Name ='Pics']”);
XmlElement child = docx.CreateElement("Batch");
child.SetAttribute("Name", System.IO.Path.GetFileName(fname));
child.SetAttribute("Type", "Batch");
child.SetAttribute("Path", fname);
element.AppendChild(child);
docx.Save("d:/a/library.xml");
TreeView tr = (TreeView)Application.Current.MainWindow.FindName("libraryTree");
//TreeView tr = (TreeView)this.Owner.FindName("libraryTree");
tr.Items.Refresh();
tr.UpdateLayout();
但是tr仍然是空的:(
答案 0 :(得分:0)
不幸的是,您无法使用弹出窗口向上或向下移动视觉树,因为弹出窗口不是可视树的一部分。与DataBinding相同,弹出窗口不会继承树中的绑定。
我使用Josh Smith's DataContextSpy
类/示例来实例化弹出窗口所需的部分绑定,并将其作为StaticResource
分配给弹出窗口。然后在弹出窗口中直接操作DataContext,它间接操作应用程序的其他peices(在您的情况下 - 可视树)。
或者您可以选择将控件的某些部分公开为公共属性方法,并允许它们之间更紧密的耦合。