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