无废话WPF系列9: Binding的源
2011-02-19 16:45 敏捷的水 阅读(3817) 评论(2) 编辑 收藏 举报1. 绑定到其它元素
1 2 3 4 5 6 | < Grid > < StackPanel > < TextBox x:Name="textbox1" /> < Label Content="{Binding ElementName=textbox1, Path=Text}" /> </ StackPanel > </ Grid > |
2. 绑定到静态资源
1 2 3 4 5 6 7 8 9 | < Window.Resources > < ContentControl x:Key="text">Hello, World!</ ContentControl > </ Window.Resources > < Grid > < StackPanel > < Label x:Name="label1" Content="{Binding Source={StaticResource text}}" /> </ StackPanel > </ Grid > < strong >3. 绑定到自身</ strong > |
1 2 3 4 5 | < Grid > < StackPanel > < Label x:Name="label1" Content="{Binding RelativeSource={RelativeSource Self}, Path=Name}" /> </ StackPanel > </ Grid > |
4. 绑定到指定类型的父元素
1 2 3 4 5 6 | < Grid x:Name="Grid1"> < StackPanel > < Label x:Name="label1" Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}, Path=Name}" /> </ StackPanel > </ Grid > |
5. 绑定到对象
1 2 3 4 5 | public class Person { public string Name { get ; set ; } public int Age { get ; set ; } } |
1 2 3 4 5 6 7 8 | < StackPanel x:Name="stackPanel"> < StackPanel.DataContext > < local:Person Name="Jack" Age="30"></ local:Person > </ StackPanel.DataContext > < TextBlock Text="{Binding Path=Name}"></ TextBlock > < TextBlock Text="{Binding Path=Age}"></ TextBlock > </ StackPanel > |
6. 绑定到集合
1 2 3 4 5 6 7 8 | public class Person { public string Name { get ; set ; } public int Age { get ; set ; } } public class PersonList : ObservableCollection<Person> { } |
1 2 3 4 5 6 7 8 9 10 11 | < Window.Resources > < local:PersonList x:Key="person"> < local:Person Name="Jack" Age="30"></ local:Person > < local:Person Name="Tom" Age="32"></ local:Person > </ local:PersonList > </ Window.Resources > < StackPanel x:Name="stackPanel"> < ListBox ItemsSource="{Binding Source={StaticResource ResourceKey=person}}" DisplayMemberPath="Name"> </ ListBox > </ StackPanel > |
7. DataContext共享源
我们需要将同一资源绑定到多个 UI 元素上,很显然到处写 "{Binding Source={StaticResource person}}" 是件很繁琐且不利于修改的做法。WPF 提供了一个称之为 "数据上下文 (DataContext)" 的东西让我们可以在多个元素上共享一个源对象,只需将其放到父元素 DataContext 属性即可。当我们不给 Binding 扩展标志指定 Source 属性时,它会自动寻找上级父元素的数据上下文。
1 2 3 4 5 6 7 8 9 10 11 | < Window.Resources > < local:PersonList x:Key="person"> < local:Person Name="Jack" Age="30"></ local:Person > < local:Person Name="Tom" Age="32"></ local:Person > </ local:PersonList > </ Window.Resources > < StackPanel x:Name="stackPanel" DataContext="{StaticResource person}"> < ListBox ItemsSource="{Binding}" DisplayMemberPath="Name"> </ ListBox > </ StackPanel > |
8. 使用XML作为Binding的源
XML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <? xml version="1.0" encoding="utf-8" ?> < PersonList > < Person Id="1"> < Name >Jack</ Name > </ Person > < Person Id="2"> < Name >Tom</ Name > </ Person > < Person Id="3"> < Name >Justin</ Name > </ Person > < Person Id="4"> < Name >David</ Name > </ Person > </ PersonList > |
XAML:
1 2 3 4 5 6 7 8 9 10 11 12 13 | < StackPanel > < ListView x:Name="personListView"> < ListView.View > < GridView > < GridViewColumn Header="Id" Width="100" DisplayMemberBinding="{Binding XPath=@Id}"/> < GridViewColumn Header="Name" Width="100" DisplayMemberBinding="{Binding XPath=Name}"/> </ GridView > </ ListView.View > </ ListView > < Button Click="Button_Click">Load Data</ Button > </ StackPanel > |
后台代码:
1 2 3 4 5 6 7 8 9 10 11 12 | private void Button_Click( object sender, RoutedEventArgs e) { XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load( "Person.xml" ); XmlDataProvider xdp = new XmlDataProvider(); xdp.Document = xmlDocument; xdp.XPath = @"/PersonList/Person" ; this .personListView.DataContext = xdp; this .personListView.SetBinding(ListView.ItemsSourceProperty, new Binding()); } |

扫码关注公众号,了解更多管理,见识,育儿等内容

作者: 王德水
出处:http://www.cnblogs.com/cnblogsfans
版权:本文版权归作者所有,转载需经作者同意。
出处:http://www.cnblogs.com/cnblogsfans
版权:本文版权归作者所有,转载需经作者同意。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)