深入浅出-Binding的源与路径
1.把控件作为Binding源与Binding标记扩展
<TextBox x:Name="textBox1" Text="{Binding Path=Value, ElementName=slider1}" />
或
<TextBox x:Name="textBox1" Text="{Binding Value, ElementName=slider1}" />
<Slider x:Name="slider1" Maximum="100" Minimum="0" Margin="5" />
Binding还支持多级路径
<TextBox x:Name="textBox1" Text="{Binding Path=Text.Length, ElementName=textBox1,Mode=OneWay}" />
2.控制Binding的方向及数据更新
Binding的数据流向的属性BindingMode[TwoWay, OneWay, OnTime, OneWayToSource, Default]
3.没有Path的Binding
<StackPannel.Resources>
<sys:String x:Key="myString">喜欢美女</sys:String>
<StackPanel.Resources>
<TextBlock x:Name="textBlock1" Text="{Binding Paht=.,Source={StaticResource ResourceKey=myString}}" />
或
<TextBlock x:Name="textBlock1" Text="{Binding Paht=.,Source={StaticResource ResourceKey=myString}}" />
或
<TextBlock x:Name="textBlock1" Text="{Binding .,Source={StaticResource ResourceKey=myString}}" />
或
<TextBlock x:Name="textBlock1" Text="{Binding Source={StaticResource ResourceKey=myString}}" />
注意:
a.c#代码里进行绑定字符串时是不能省略path的.
string myString="fuckfuck";
this.textBlock1.setBinding(TextBlock.TextProperty,new Binding("."){Source=myString});
b.XAML代码里的这个path和"."可省略
4.使用DataContext作为Binding的源
public class Student
{
public int Id {get;set;}
public string Name {get;set;}
public int Age {get;set;}
}
xmlns:local="clr-namespace:WpfApplication1" //命名空间下
<StackPanel>
<StackPanel.DataContext>
<local:Student Id="6" Age="29" Name="Tim" /> //数据
</StackPanel.DataContext>
<TextBox Text="{Binding Path=Id}" Margin="5" />
<TextBox Text="{Binding Path=Name}" Margin="5" />
<TextBox Text="{Binding Path=Age}" Margin="5" />
</StackPanel>
<Grid DataContext="6">
<Grid>
<Grid>
<Button x:Name="btn" Content="OK" Click="btn_Click" />
</Grid>
</Grid>
</Grid>
private void btn_Click(object sender,RoutedEventArgs e)
{
MessageBox.Show(btn.DataContext.ToString()); //会显示6,因为属性值沿UI元素树向下传递
}
注:其实DataContext是一个依赖属性,会向内层控件传递
<StackPanel>
<StackPanel.DataContext>
<sys:String>Hello DataContext </sys:string> //数据
</StackPanel.DataContext>
<TextBox Text="{Binding}" Margin="5" />
</StackPanel>
5.使用集合对象进行ItemsSource绑定
wpf中的列表式控件是派生自ItemsControl类,自然也就继承了ItemSource这个属性,每个ItemsControl的派生类都具有自己对应的条目容器(Item Container),如ListBox的条目容器是ListBoxItem,ComboxBox的条目容器是ComboBoxItem
this.listBoxStudents.ItemsSource=stuList; //设置绑定数据源
this.listBoxStudents.DisplayMemberPath="Name"; //绑定要显示的属性
<ListBox x:Name="listBoxStudents">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Id}" Width="30" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
6使用ADO.NET对象作为Binding的源
DataTable dt=this.GetData();
this.listBoxStudents.DisplayMemberPath="Name";
this.listBoxStudents.ItemsSource=dt.DefaultView;
<ListView x:Name="listViewStudents" >
<ListView.View>
<GridView>
<GridViewColumn Header="Id" Width="60" DisplayMemberBinding="{Binding Id}" />
<GridViewColumn Header="Id" Width="60" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="Id" Width="60" DisplayMemberBinding="{Binding Age}" />
</GridView>
</ListView.View>
</ListView>
注:ListView是ListBox的派生类,GridView是ViewBase的派生类,ListView的View属性是一个ViewBase类型的对象,目前只有一个GridView可用于ListView。
7.XML数据作为Binding的源
假设xml文件存于D:\RawData.xml
<?xml version="1.0" encoding="utf-8">
<StudentList>
<Student Id="1">
<Name>Tim</Name>
</Student>
<Student Id="2">
<Name>Tom</Name>
</Student>
<StudentList>
<ListView x:Name="listViewStudents" >
<ListView.View>
<GridView>
<GridViewColumn Header="Id" Width="60" DisplayMemberBinding="{Binding XPath=@Id}" />
<GridViewColumn Header="Id" Width="60" DisplayMemberBinding="{Binding XPath=@Name}" />
<GridViewColumn Header="Id" Width="60" DisplayMemberBinding="{Binding XPath=@Age}" />
</GridView>
</ListView.View>
</ListView>
后台读取xml数据
XmlDocument doc=new XmlDocument();
doc.Load(@"D:\RawData.xml");
XmlDataProvider xdp=new XmlDataProvider();
xdp.Document=doc;
xdp.XPath=@"/StudentList/Student";
或
XmlDataProvider xdp=new XmlDataProvider();
xdp.Source=new Uri(@"D:\RawData.xml");
xdp.XPath=@"/StudentList/Student";
this.listViewStudents.DataContext=xdp;
this.listViewStudents.SetBinding(ListView.ItemsSourceProperty,new Binding());
LINQ查询绑定
this.listViewStudents.ItemsSource=from stu in stuList where stu.Name.StartsWith("T") select stu;
或
DataTable dt=this.GetDataTable();
this.listViewStudents.ItemsSource=
from row in dt.Rows.Cast<DataRow>()
where Convert.ToString(row["Name"]).StartsWith("T")
select new Student()
{
Id=int.Parse(row["Id"].ToString()),
Name=row["Name"].ToString(),
Age=int.Parse(row["Age"].ToString())
};
this.listViewStudents.ItemsSource=
from element in xdoc.Descendants("Student")
where element.Attribute("Name").Value.StartsWith("T")
select new Student()
{
Id=int.Parse(element.Attribute("Id").Value),
Name=element.Attribute("Name").Value,
Age=int.Parse(element.Attribute("Age").Value),
};
深入浅出-Binding的源与路径的更多相关文章
- Binding的源与路径
1.把控件作为Binding的源 例子:拖动Slider,输入框中的值也会跟着改变,或在输入框中输入数值,滑动条也会自动移动 <Window x:Class="把控件作为Binding ...
- WPF 基础 - Binding 的源与路径
1. 源与路径 把控件作为 binding 源与 binding 标记拓展: 控制 Binding 的方向及数据更新: Binding 的路径 Path: 没有路径的 Binding: 为 Bindi ...
- 【深入浅出jQuery】源码浅析2--奇技淫巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 【深入浅出jQuery】源码浅析2--使用技巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 【深入浅出jQuery】源码浅析--整体架构
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- (转)【深入浅出jQuery】源码浅析2--奇技淫巧
[深入浅出jQuery]源码浅析2--奇技淫巧 http://www.cnblogs.com/coco1s/p/5303041.html
- 浅谈 qmake 之 shadow build(将源码路径和构建路径分开,一套源码要分别用msvc2008、msvc2008、mingw分别编译又不互相干扰)
shadow build shadow build 是什么东西?就是将源码路径和构建路径分开(也就是生成的makefile文件和其他产物都不放到源码路径),以此来保证源码路径的清洁. 这不是qmake ...
- 【深入浅出jQuery】源码浅析--整体架构(转)
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 相辅相成的求最单源短路径算法:(SPFA& dijkstra)
引用一位老oier的话: 一道题如果边权没有负数,那么一定是在卡SPFA.这时候就用到了堆优化的Dijkstra; 写在前面: 多打代码! 最好都掌握,灵活变通 SPFA: 主要用于稀疏图和有负权边的 ...
随机推荐
- C++ 带有通配符*与?的字符串匹配
题目:两个字符串,一个是普通字符串,另一个含有*和?通配符,*代表零个到多个任意字符,?代表一个任意字符,通配符可能多次出现.写一个算法,比较两个字符串是否相等. 发现许多公司笔试面试都有这道题目,于 ...
- 阿里云部署 Flask + uWSGI + Nginx
一.引言 今天入手了一台阿里云服务器,是centeros 7.5版本.本文解决的是 Flask 的部署问题.假设你的Flask的应用已经完成,现在只是部署的问题,本文以部署我的二次开发微信订阅号的项目 ...
- POJ-3131-Cubic Eight-Puzzle(双向BFS+哈希)
Description Let's play a puzzle using eight cubes placed on a 3 × 3 board leaving one empty square. ...
- GROUP BY 和 ORDER BY一起使用
转:http://lzfhope.blog.163.com/blog/static/636399220092554045196/ 环境:oracle 10g单单group by 或者order by本 ...
- js原生函数bind
/*在javascript中,函数总是在一个特殊的上下文执行(称为执行上下文),如果你将一个对象的函数赋值给另外一个变量的话,这个函数的执行上下文就变为这个变量的上下文了.下面的一个例子能很好的说明这 ...
- ALV tree标准DEMO
BCALV_TREE_01 ALV 树控制:构建层次树 BCALV_TREE_02 ALV 树控制:事件处理 BCALV_TREE_03 ALV 树控制:使用自己的上下文菜单 BCALV_TREE_0 ...
- 基于python3.6.6的scrapy环境部署+图像识别插件安装
一.Python3.6.6安装1.安装依赖的二进制软件包yum -y install zlib zlib-devel bzip2 bzip2-devel ncurses ncurses-devel r ...
- POJ1269:Intersecting Lines(判断两条直线的关系)
题目:POJ1269 题意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:直线相交判断.如果相交求交点. 首先先判断是否共线,之后判断是否平行,如果都不是就直接求交点 ...
- mysql基础测试
mysql基础测试 测试原因 为什么需要做性能测试 模拟比当前系统更高的负载,找出性能瓶颈 重现线上异常 测试不同硬件软件配置 规划未来的业务增长 测试分类 性能测试的分类 设备层的测试 ...
- C++学习笔记-隐式成员函数
通过一个例子来复习C++操作符重载及隐式成员函数.MyString类模仿标准string类,简单的实现了构造一个字符串.字符串比较.取单个字符等功能.如下: #ifndef MYSTRING_H_ # ...