无废话WPF系列9: Binding的源
2011-02-19 16:45 敏捷的水 阅读(3816) 评论(2) 编辑 收藏 举报1. 绑定到其它元素
<Grid> <StackPanel> <TextBox x:Name="textbox1" /> <Label Content="{Binding ElementName=textbox1, Path=Text}" /> </StackPanel> </Grid>
2. 绑定到静态资源
<Window.Resources> <ContentControl x:Key="text">Hello, World!</ContentControl> </Window.Resources> <Grid> <StackPanel> <Label x:Name="label1" Content="{Binding Source={StaticResource text}}" /> </StackPanel> </Grid> 3. 绑定到自身
<Grid> <StackPanel> <Label x:Name="label1" Content="{Binding RelativeSource={RelativeSource Self}, Path=Name}" /> </StackPanel> </Grid>
4. 绑定到指定类型的父元素
<Grid x:Name="Grid1"> <StackPanel> <Label x:Name="label1" Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}, Path=Name}" /> </StackPanel> </Grid>
5. 绑定到对象
public class Person { public string Name { get; set; } public int Age { get; set; } }
<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. 绑定到集合
public class Person { public string Name { get; set; } public int Age { get; set; } } public class PersonList : ObservableCollection<Person> { }
<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 属性时,它会自动寻找上级父元素的数据上下文。
<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:
<?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:
<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>
后台代码:
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
版权:本文版权归作者所有,转载需经作者同意。