none
WPF 用户控件 RRS feed

  • 问题

  • 想用WPF做一个数据展示的用户控件,容器为缺省的Grid,主要数据展示控件就是一个DataGrid。用XmlDocument对象读取XML文件,然后付给XmlDataProvider,DataGrid绑定XmlDataProvider,绑定字段使用XPath,而不是Path。需要展示的数据是根据xml文件变化的。测试xml节点如下:
    <root>
       <元素>
            <a>测试a1</a>
            <b>测试b1</b>
             <c>测试c1</c>
        </元素>
       <元素>
            <a>测试a2</a>
            <b>测试b2</b>
             <c>测试c2</c>
        </元素>
    <root>
             请教大家给些示例或思路.
    2013年8月19日 4:56

答案

  • 您好,

    根据您的需求,我制作了一个Demo。Demo中的有一个DataGrid控件,其中包含三列:A, B, C,XMLFile1.xml中包含了您提供的测试节点数据,点击界面上的按钮,就可以加载XML数据到DataGrid,Button的Click事件实现方式为:

    private void btnLoad_Click(object sender, RoutedEventArgs e)
    {
                XmlDocument doc = new XmlDocument();
                doc.Load("..\\..\\XMLFile1.xml");
    
                XmlDataProvider xdp = new XmlDataProvider();
                xdp.Document = doc;
                dgStudent.DataContext = xdp;
                xdp.XPath = @"root/元素";
    
                this.dgStudent.SetBinding(ListView.ItemsSourceProperty, new Binding());
    }
    

    XAML代码:

    <Window x:Class="WpfDGXML.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="250" Width="300">
            <StackPanel Background="LightBlue">
                <DataGrid x:Name="dgStudent" Height="170" Margin="5" AutoGenerateColumns="False">
                    <DataGrid.Columns>
                        <DataGridTemplateColumn Header="A" Width="90">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBox Text="{Binding XPath=a}" />
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                        <DataGridTemplateColumn Header="B" Width="90">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBox Text="{Binding XPath=b}" />
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                    <DataGridTemplateColumn Header="C" Width="90">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBox Text="{Binding XPath=c}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
                </DataGrid>
                <Button Content="OK" Click="btnLoad_Click" x:Name="btnLoad" Margin="5"/>
            </StackPanel>
    </Window>

    对于变化的XML数据,您可以使用计时器控件,定时刷新数据

    请阅读以下的参考资料:

    #XmlDocument Class
    http://msdn.microsoft.com/zh-cn/library/system.xml.xmldocument.aspx

    #Binding.XPath Property
    http://msdn.microsoft.com/zh-cn/library/system.windows.data.binding.xpath.aspx


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年8月20日 4:54
    版主