C# 使用树视图在WPF中获取XML属性
我正试图从XDocument在WPF中创建一个树视图。 到目前为止,我可以创建包含所有节点和值的树。 现在我想添加所有属性。我的问题从这里开始;-) 相关的XAML如下所示:C# 使用树视图在WPF中获取XML属性,c#,wpf,xaml,treeview,linq-to-xml,C#,Wpf,Xaml,Treeview,Linq To Xml,我正试图从XDocument在WPF中创建一个树视图。 到目前为止,我可以创建包含所有节点和值的树。 现在我想添加所有属性。我的问题从这里开始;-) 相关的XAML如下所示: <Window.Resources> <HierarchicalDataTemplate x:Key="NodeTemplate"> <StackPanel Orientation="Horizontal" Focusable="False">
<Window.Resources>
<HierarchicalDataTemplate x:Key="NodeTemplate">
<StackPanel Orientation="Horizontal" Focusable="False">
<TextBlock x:Name="tbName" Text="dummy" />
<ItemsControl ItemsSource="{Binding Attributes}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Name}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
<HierarchicalDataTemplate.ItemsSource>
<Binding Path="Elements" />
</HierarchicalDataTemplate.ItemsSource>
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=NodeType}" Value="Element">
<Setter TargetName="tbName" Property="Text" Value="{Binding Path=Name}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=FirstNode.NodeType}" Value="Text">
<Setter TargetName="tbName" Property="Text">
<Setter.Value>
<MultiBinding StringFormat="{}{0} = {1}">
<Binding Path="Name"/>
<Binding Path="FirstNode.Value"/>
</MultiBinding>
</Setter.Value>
</Setter>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
</Window.Resources>
...
<ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<TreeView x:Name="LizenzAnsicht"
ItemsSource="{Binding Path=Root.Elements}"
ItemTemplate="{StaticResource ResourceKey=NodeTemplate}"
/>
</ScrollViewer>
LadeDatei.LizenzProjekt = XDocument.Load(@"C:\Users\Bernd\Documents\trash\theXMLFile.xml");
LizenzAnsicht.DataContext = LadeDatei.LizenzProjekt;
如前所述,树结构看起来相当不错,只是没有显示任何属性。
Visual Studio在目录中显示一些错误(直接windows?):
System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“XElement”(HashCode=51812368)上未找到“属性”属性。BindingExpression:路径=属性;DataItem='XElement'(HashCode=51812368);目标元素是“ItemsControl”(名称=“”);目标属性为“ItemsSource”(类型为“IEnumerable”)
有什么提示我需要做什么才能让它工作吗
问候
BerndAttributes()
是一种简化方法。不支持绑定到方法
我将使用转换器从XElement获取属性以进行绑定:
public class XAttributesConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var xe = value as XElement;
if (xe == null)
return Enumerable.Empty<XAttribute>();
return xe.Attributes();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
公共类XAttributesConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
var xe=作为XElement的值;
if(xe==null)
返回可枚举的.Empty();
返回xe.Attributes();
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}
及
元素如何绑定?我不明白Elements()
和Attributes()
是XELementI的方法,我现在不知道它为什么要处理元素,但它确实如此。当这起作用时,我希望属性也能起作用。。。
<Window.Resources>
<wpfDemos:XAttributesConverter x:Key="AttrConverter"/>
<Window.Resources>
<ItemsControl ItemsSource="{Binding Converter={StaticResource AttrConverter}}">