WPF DataGrid 与 XmlDataProvider 简单示例

发布于 2024-09-10 08:39:07 字数 636 浏览 5 评论 0原文

经过几个小时尝试获得一些工作样本后,我决定在这里碰碰运气。我是 WPF 的新手,但随着时间的推移,事情应该会变得更容易......

我正在尝试让 DataGrid 显示我拥有的 XML 文件。就是这样。

我的应用程序 cars.xml

  <cars>
    <car type="Ford" size="4" />
    <car type="Mercedes" size="2" />
    <car type="BMW" size="1" />
  </cars>

现在我有一个 UserControl,它有一个 DataGrid (在 VS2008 上使用 .NET 3.5 SP1 和 CodePlex ToolKit):

   <dg:DataGrid ItemsSource="{Binding cars}" />

据我了解,因为它有 AutoColumn,所以它应该向我显示一个带有汽车的网格...但事实并非如此。 我想我的错误与绑定有关。我在 WPF 中还没有很好的绑定想法,但我正在学习。那么我如何正确地将 ItemSource 指向我的 cars.xml 呢?

10 倍。

After a few hours trying to reach some working sample i decided to try my luck here. I am a newbie to WPF, but things should get easier with time ...

I am trying to have a DataGrid showing an XML file i have. That's it.

I have in my application cars.xml

  <cars>
    <car type="Ford" size="4" />
    <car type="Mercedes" size="2" />
    <car type="BMW" size="1" />
  </cars>

Now i have a UserControl which have a DataGrid (using .NET 3.5 SP1 on VS2008 with CodePlex ToolKit):

   <dg:DataGrid ItemsSource="{Binding cars}" />

As i understands, since it have AutoColumn it should show me a grid with the cars ... but it's not.
I guess my error is with the Binding. I haven't got this Binding idea so good in WPF but i am learning. So how do i point the ItemSource to my cars.xml correctly?

10x.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

优雅的叶子 2024-09-17 08:39:07

您必须将 xml 文件指定为网格或窗口的资源。例如:

<Window.Resources>
<XmlDataProvider XmlNamespaceManager="{StaticResource ns}" x:Key="rss" Source="http://weather.yahooapis.com/forecastrss?p=RSXX1410&u=c" XPath="/rss/channel" />
...

静态资源 ns - 它是不同前缀的命名空间 - 如果您的 xml 中有它:

<XmlNamespaceMappingCollection x:Key="ns">
        <XmlNamespaceMapping Prefix="yweather" Uri="http://xml.weather.yahoo.com/ns/rss/1.0" />
        <XmlNamespaceMapping Prefix="geo" Uri="http://www.w3.org/2003/01/geo/wgs84_pos#" />
    </XmlNamespaceMappingCollection>
...
</Window.Resources>

现在您可以将您的 xaml 元素绑定到您的 xml 元素:

<Grid DataContext="{Binding Source={StaticResource rss}, XPath=item}">
     <Image  Width="200" Height="180" Source="{Binding XPath=yweather:condition/@code, Converter={StaticResource WeatherCodeToImageConverter}}" />
</Grid>

就是这样。

You must specify your xml file as as resource of you grid, or of you window. For example:

<Window.Resources>
<XmlDataProvider XmlNamespaceManager="{StaticResource ns}" x:Key="rss" Source="http://weather.yahooapis.com/forecastrss?p=RSXX1410&u=c" XPath="/rss/channel" />
...

Static Resource ns -it's a namespace for different prefixes -if you have it in your xml:

<XmlNamespaceMappingCollection x:Key="ns">
        <XmlNamespaceMapping Prefix="yweather" Uri="http://xml.weather.yahoo.com/ns/rss/1.0" />
        <XmlNamespaceMapping Prefix="geo" Uri="http://www.w3.org/2003/01/geo/wgs84_pos#" />
    </XmlNamespaceMappingCollection>
...
</Window.Resources>

Now you can make binding your xaml elements to your xml-elements:

<Grid DataContext="{Binding Source={StaticResource rss}, XPath=item}">
     <Image  Width="200" Height="180" Source="{Binding XPath=yweather:condition/@code, Converter={StaticResource WeatherCodeToImageConverter}}" />
</Grid>

Thats it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文