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 [email protected]}"/>
<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/archive/2011/02/19/1958586.html如需转载请自行联系原作者
王德水