wpf 树视图绑定到 xml [英] wpf treeview bind to xml

查看:36
本文介绍了wpf 树视图绑定到 xml的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 xml(如果需要,可以更改结构)它需要绑定到 wpf 中的树视图控件,这样当我单击树中的特定节点时,它会填充一个包含更多信息的列表框这也来自 xml.

I have an xml (the structure can be changed if need be) which needs to be bound to a treeview control in wpf, such that when I click on a particular node in the tree, it populates a list box with more information which also comes from the xml.

我的xml如下:

<Event locale="en-US">
<Eventid Name="Mer101">
    <EventType>StoredProc</EventType>
    <EventParameters>
        <EventParameter>Field1</EventParameter>
        <EventParameter>Field2</EventParameter>
    </EventParameters>
    <ErrorMessage>Error_Msg_Localized_ID {Field1} {Field2}...</ErrorMessage>
    <EventStartDate>DateTime</EventStartDate>
    <EventEndDate>DateTime</EventEndDate>
</Eventid>
<Eventid Name="Ora101">
    <EventType>LowLevelEvents</EventType>
    <EventParameters>
        <EventParameter>Field1</EventParameter>           
    </EventParameters>
    <ErrorMessage>Error message {Field1}...</ErrorMessage>
    <EventStartDate>DateTime</EventStartDate>
    <EventEndDate>DateTime</EventEndDate>
</Eventid>
<Eventid Name="Ora102">
    <EventType>LowLevelEvents</EventType>
    <EventParameters>
        <EventParameter>Field1</EventParameter>
        <EventParameter>Field2</EventParameter>
    </EventParameters>
    <ErrorMessage>Error message {Field1} {Field2}...</ErrorMessage>
    <EventStartDate>DateTime</EventStartDate>
    <EventEndDate>DateTime</EventEndDate>
</Eventid>

所以树视图应该如下所示:

So the treeview should look like the following:

+Rootnode
    -Mer101
    -Ora101
    -Ora102

例如,当用户单击 Mer101 时,绑定的列表框会显示来自 xml 的 ErrorMessage.

When the user clicks on Mer101 for example, the listbox bound shows the ErrorMessage from the xml.

我尝试使用分层数据模板并尝试使用 xdocument 的 xmldataprovider 但到目前为止没有运气.有人有什么想法吗?

I've tried to use a hierarchicaldatatemplate and trying xmldataprovider with an xdocument but getting no luck so far. Does anyone have any ideas?

谢谢尼基尔

推荐答案

我找到了一种无需将 HDT 绑定到 xml 的方法.这是xaml:

I found a way to do it without tying the HDT to the xml. Here is the xaml:

<Window x:Class="DBUpgradeUI.DBUpgEventReportingResolution"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="DBUpgEventReportingResolution" Height="453" Width="549" WindowStartupLocation="CenterScreen" Loaded="Window_Loaded">
<Window.Resources>
    <HierarchicalDataTemplate x:Key="TVTemplate">
        <TextBlock x:Name="text" Text="?" />
        <HierarchicalDataTemplate.ItemsSource>
            <Binding XPath="child::node()" />
        </HierarchicalDataTemplate.ItemsSource>
        <HierarchicalDataTemplate.Triggers>
            <DataTrigger Binding="{Binding Path=NodeType}" Value="Text">
                <Setter TargetName="text" Property="Text" Value="{Binding Path=Value}"></Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=NodeType}" Value="Element">
                <Setter TargetName="text" Property="Text" Value="{Binding Path=Name}"></Setter>
            </DataTrigger>
        </HierarchicalDataTemplate.Triggers>
    </HierarchicalDataTemplate>
    <XmlDataProvider x:Key="xmlDataProvider" />
</Window.Resources>
<Grid>
           <TreeView Name="treeview" ItemsSource="{Binding Source={StaticResource xmlDataProvider},XPath=*}"
        Margin="0,37,0,0" HorizontalAlignment="Left" Width="198" 
              ItemTemplate="{StaticResource TVTemplate}"
              />
</Grid>

以及xmldataprovider背后的代码如下:

and the code behind to the xmldataprovider is as follows:

XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(advEventsXML);
        XmlDataProvider dataProvider = this.FindResource("xmlDataProvider") as XmlDataProvider;
        dataProvider.Document = xmlDoc;

        treeview.DataContext = dataProvider;

我正在使用的示例 xml 的示例如下:

an example of the sample xml I'm using is as follows:

<AllEvents>
<Meridium>Mer101
    <Type>StoredProcedure</Type>
    <EventParameters>Field1</EventParameters>
     <ErrorMessage>Error_Msg_Localized_ID {Field1} {Field2}...</ErrorMessage>
    <EventStartDate>DateTime</EventStartDate>
    <EventEndDate>DateTime</EventEndDate>
</Meridium>
<OtherEvents>
    <Database>Ora101
        <Type>LowerLevelEvents</Type>
        <EventParameters>
            <Parameter>Field1</Parameter>
            <Parameter>Field2</Parameter>
        </EventParameters>
         <ErrorMessage>Error_Msg_Localized_ID {Field1} {Field2}...</ErrorMessage>
        <EventStartDate>DateTime</EventStartDate>
        <EventEndDate>DateTime</EventEndDate>
    </Database>
    <Database>Ora102
        <Type>LowerLevelEvents</Type>
        <EventParameters>
            <Parameter>Field1</Parameter>
            <Parameter>Field2</Parameter>
        </EventParameters>
         <ErrorMessage>Error_Msg_Localized_ID {Field1} {Field2}...</ErrorMessage>
        <EventStartDate>DateTime</EventStartDate>
        <EventEndDate>DateTime</EventEndDate>
    </Database>
</OtherEvents>   </AllEvents>

这篇关于wpf 树视图绑定到 xml的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆