在TreeView WPF中显示XMLDataProvider的内容

时间:2018-01-10 11:01:47

标签: c# xml wpf treeview

我想在TreeView中显示XmlDocument的内容。 我已经从XMLDocument创建了一个XMLDataProvider:

Parent = new XmlDataProvider() { Document = e.XsdData, XPath = "*" };

并将Parent绑定到TreeView。我正在使用HierarchicalDataTemplate来显示节点的名称:

<TreeView Name="treeView" ItemsSource="{Binding Parent}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="xs:simpleType"
                                  ItemsSource="{Binding XPath=xs:element}">
            <TextBlock Text="{Binding XPath=name}"/>
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>

这是我加载的XML文件的一部分:

<?xml version="1.0"?>
<xs:schema xmlns:cfg="syncAXIS" elementFormDefault="qualified" targetNamespace="syncAXIS" version="0.5" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="LogConfigType">
    <xs:all>
      <xs:element name="LogfilePath" type="xs:string" />
      <xs:element name="Loglevel">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="Error" />
            <xs:enumeration value="Warn" />
            <xs:enumeration value="Info" />
            <xs:enumeration value="Debug" />
            <xs:enumeration value="Trace" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="EnableConsoleLogging" type="xs:boolean" />
      <xs:element name="EnableFilelogging" type="xs:boolean" />
      <xs:element name="MaxLogfileSize" type="xs:positiveInteger" />
      <xs:element name="MaxBackupFileCount" type="xs:nonNegativeInteger" />
    </xs:all>
  </xs:complexType>
  <xs:simpleType name="IPAddressType">
    <xs:restriction base="xs:string">
      <xs:pattern value="(([01][0-9][0-9]|2[0-4][0-9]|25[0-5]|[0-9][0-9]|[0-9])\.){3}([01][0-9][0-9]|2[0-4][0-9]|25[0-5]|[0-9][0-9]|[0-9])" />
    </xs:restriction>
  </xs:simpleType>

TreeView未更新/从未显示。 DataContext已正确设置为我的ViewModel:

private XMLEditorViewModel viewModel;
public MainWindow()
{
    viewModel = new XMLEditorViewModel();
    DataContext = viewModel;
    InitializeComponent();
}

2 个答案:

答案 0 :(得分:1)

解决方案是

  1. 使用TreeView.DataTemplate而不是TreeView.Resources
  2. 使用ItemsSource = Parent.Document而不是ItemsSource = Parent

                                            

答案 1 :(得分:0)

articleSource Code可能会帮助您