前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WPF 使用 XmlDataProvider 提供数据

WPF 使用 XmlDataProvider 提供数据

作者头像
林德熙
发布2021-03-11 14:31:34
8690
发布2021-03-11 14:31:34
举报
文章被收录于专栏:林德熙的博客林德熙的博客

有一些界面逻辑包含了列表,列表里面的内容是咱可以预设置进去的,但是列表里面的内容是复杂的内容。此时我推荐使用 XmlDataProvider 提供数据,使用 XmlDataProvider 可以将所有逻辑都放在 XAML 上,十分清真

是否有小伙伴好奇 Binding 的 XPath 是用在哪里的?其实在使用 XmlDataProvider 提供数据,绑定就需要用到 XPath 属性,例如我需要定义书籍列表,书籍信息包括了 ISBN 序列号以及书名等信息,此时的定义可以是如下

代码语言:javascript
复制
        <Grid.Resources>
            <XmlDataProvider x:Key="InventoryData" XPath="Books">
                <x:XData>
                    <Books xmlns="">
                        <Book ISBN="0-7356-0562-9" Stock="in" Number="9">
                            <Title>XML in Action</Title>
                            <Summary>XML Web Technology</Summary>
                        </Book>
                        <Book ISBN="0-7356-1370-2" Stock="in" Number="8">
                            <Title>Programming Microsoft Windows With C#</Title>
                            <Summary>C# Programming using the .NET Framework</Summary>
                        </Book>
                        <Book ISBN="0-7356-1288-9" Stock="out" Number="7">
                            <Title>Inside C#</Title>
                            <Summary>C# Language Programming</Summary>
                        </Book>
                        <Book ISBN="0-7356-1377-X" Stock="in" Number="5">
                            <Title>Introducing Microsoft .NET</Title>
                            <Summary>Overview of .NET Technology</Summary>
                        </Book>
                        <Book ISBN="0-7356-1448-2" Stock="out" Number="4">
                            <Title>Microsoft C# Language Specifications</Title>
                            <Summary>The C# language definition</Summary>
                        </Book>
                    </Books>
                </x:XData>
            </XmlDataProvider>
        </Grid.Resources>

使用上面定义的资源作为数据,可以使用绑定资源的写法,如下面代码

代码语言:javascript
复制
 <ListView ItemsSource="{Binding Source={StaticResource InventoryData}, XPath=Book}"/>

可以看到在上面定义的 XML 内容里面,有两个定义的写法,如 ISBN 和 Title 两个不同的方式的定义。如 ISBN 是属性,而 Title 可以视为子元素,在 XAML 绑定里面,需要对其区分,对于子元素来说,只需要写对应的名字即可。但是对于 XML 属性,就需要在属性名前面加 @ 符号,如下面代码

代码语言:javascript
复制
        <ListView ItemsSource="{Binding Source={StaticResource InventoryData}, XPath=Book}">
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>

            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid Background="#5a5a5a" Margin="10,10,10,10">
                        <StackPanel Margin="2,2,2,2">
                            <TextBlock Text="{Binding XPath=Title}" />
                            <TextBlock Text="{Binding XPath=@ISBN}" />
                        </StackPanel>
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

可以看到用上面方式编写的逻辑还是十分清真的

本文代码放在 githubgitee 欢迎小伙伴访问

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

无盈利,不卖课,做纯粹的技术博客

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档