【问题标题】:XML binding to DataGrid in WPFXML 绑定到 WPF 中的 DataGrid
【发布时间】:2014-11-27 22:15:55
【问题描述】:

我正在尝试将 XML 数据绑定到 DataView。我正在关注this guide,但是即使我可以在 Visual Studio 2013 下看到结果,但在运行程序时也看不到结果。我尝试将 Movies.xml 添加到 Resources 并将其添加到项目目录。目前它位于项目根路径下。在我写这篇文章的时候,有一段时间我在项目运行时看到了结果,但是在干净构建之后它又消失了。

电影.XML:

<?xml version="1.0" encoding="utf-8" ?>
<Movies xmlns="">
  <Movie Name="Seven Samurai" Id="101" Director="Akira Kurosawa" />
  <Movie Name="Happy Together" Id="102" Director="Wong Kar Wai"/>
  <Movie Name="Shoot The Piano Player" Id="103" Director="Francois Truffaut"/>
  <Movie Name="Roshomon" Id="104" Director="Akira Kurosawa" />
  <Movie Name="Dead Man" Id="105" Director="Jim Jarmusch"/>
  <Movie Name="Children of Heaven" Id="106" Director="Majid Majidi"/>
</Movies>

XAML:

<Window x:Class="DataGridXML.MainWindow"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.Resources>
            <XmlDataProvider x:Key="MovieData" Source="Movies.xml" XPath="/Movies/Movie"/>
        </Grid.Resources>
        <DataGrid x:Name="dgridEmp" DataContext="{StaticResource MovieData}" ItemsSource="{Binding XPath=/Movies/Movie}"
 AutoGenerateColumns="False" Margin="52,89,31,50">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Binding="{Binding XPath=@Name}" />
                <DataGridTextColumn Header="Title" Binding="{Binding XPath=@Director}" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

Visual Studio 预览版:

项目运行时间:

我的最终目标是动态绑定这样的 XML,以便用户选择解析哪个 XML。然后用户可以更改内容并保存。

【问题讨论】:

    标签: c# xml wpf datagrid visual-studio-2013


    【解决方案1】:

    您可以这样做,首先将您的 xml 转换为 DataSet,然后只需将您的 DataGridItemsSource 设置为 DataView

    string sampleXmlFile = @"C:\Users\umut.koseali\Desktop\test.xml";
    DataSet dataSet = new DataSet();
    dataSet.ReadXml(sampleXmlFile);
    DataView dataView = new DataView(dataSet.Tables[0]);
    dataGrid1.ItemsSource = dataView
    

    XAML:

    <DataGrid x:Name="dataGrid1" />
    

    【讨论】:

    • 像魅力一样工作!谢谢。
    【解决方案2】:

    您确定在 IDE 中将“Movies.xml”标记为内容吗?

    您可以从MSDN 阅读更多内容。

    【讨论】:

    • Medeni,感谢您指出嵌入文件应标记为内容。但是我的最终目标是使用用户指向的任何 XML 文件。
    猜你喜欢
    • 2011-05-14
    • 2013-06-01
    • 2014-10-23
    • 2013-10-31
    • 2011-01-13
    • 2013-11-16
    • 2013-10-14
    • 2011-08-17
    • 2014-01-09
    相关资源
    最近更新 更多