【问题标题】:wpf treeview bind to xmlwpf treeview绑定到xml
【发布时间】:2010-11-11 17:36:51
【问题描述】:

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

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

+Rootnode
    -Mer101
    -Ora101
    -Ora102

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

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

谢谢 尼基尔

【问题讨论】:

    标签: wpf treeview


    【解决方案1】:

    至于树视图,这是可行的(在 Kaxaml 中拍它):

    <Page
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <Page.Resources>
            <XmlDataProvider
                x:Key="events"
                XPath="/Events">
                <x:XData>
                    <Events
                        xmlns="">
                        <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>
                    </Events>
                </x:XData>
            </XmlDataProvider>
        </Page.Resources>
        <Grid>
            <TreeView
                x:Name="tv"
                ItemsSource="{Binding Source={StaticResource events}}">
                <TreeView.Resources>
                    <HierarchicalDataTemplate
                        DataType="Eventid">
                        <TextBlock
                            Text="{Binding XPath=@Name}" />
                    </HierarchicalDataTemplate>
                    <HierarchicalDataTemplate
                        DataType="Events"
                        ItemsSource="{Binding XPath=*}">
                        <TextBlock
                            Text="Expand to view Events" />
                    </HierarchicalDataTemplate>
                </TreeView.Resources>
            </TreeView>
        </Grid>
    </Page>
    

    很遗憾,您无法绑定到 TreeView 的 SelectedItem。为了知道选择了哪个项目,check out this question on the subject.

    【讨论】:

    • 威尔,效果很好。我还让树以不同的方式工作,并将在下面发布答案。唯一的区别是我使用的是数据触发器,因此如果 HDT 发生更改,它不会直接绑定到 xml。感谢您提供指向电视中所选项目的链接。我会给你答案。
    【解决方案2】:

    我找到了一种无需将 HDT 绑定到 xml 的方法。这是 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 后面的代码如下:

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

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

    <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>
    

    【讨论】:

      猜你喜欢
      • 2017-07-09
      • 2017-01-02
      • 2010-09-16
      • 2010-10-24
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 2010-09-19
      • 2011-07-06
      相关资源
      最近更新 更多