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