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的源与路径的更多相关文章

  1. Binding的源与路径

    1.把控件作为Binding的源 例子:拖动Slider,输入框中的值也会跟着改变,或在输入框中输入数值,滑动条也会自动移动 <Window x:Class="把控件作为Binding ...

  2. WPF 基础 - Binding 的源与路径

    1. 源与路径 把控件作为 binding 源与 binding 标记拓展: 控制 Binding 的方向及数据更新: Binding 的路径 Path: 没有路径的 Binding: 为 Bindi ...

  3. 【深入浅出jQuery】源码浅析2--奇技淫巧

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  4. 【深入浅出jQuery】源码浅析2--使用技巧

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  5. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  6. (转)【深入浅出jQuery】源码浅析2--奇技淫巧

    [深入浅出jQuery]源码浅析2--奇技淫巧 http://www.cnblogs.com/coco1s/p/5303041.html

  7. 浅谈 qmake 之 shadow build(将源码路径和构建路径分开,一套源码要分别用msvc2008、msvc2008、mingw分别编译又不互相干扰)

    shadow build shadow build 是什么东西?就是将源码路径和构建路径分开(也就是生成的makefile文件和其他产物都不放到源码路径),以此来保证源码路径的清洁. 这不是qmake ...

  8. 【深入浅出jQuery】源码浅析--整体架构(转)

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  9. 相辅相成的求最单源短路径算法:(SPFA& dijkstra)

    引用一位老oier的话: 一道题如果边权没有负数,那么一定是在卡SPFA.这时候就用到了堆优化的Dijkstra; 写在前面: 多打代码! 最好都掌握,灵活变通 SPFA: 主要用于稀疏图和有负权边的 ...

随机推荐

  1. oracle入门(6)——PL/SQL常用语法

    [本文介绍] 本文不是”语法大全“,只是记录下作项目里自己常用的一些语法.方便查询. [语法] [输出]   (1)输出语法 DBMS_OUTPUT.PUT_LINE( ) [定义]   (1)定义变 ...

  2. 基于rman的坏块恢复

    转载请注明出处 http://blog.csdn.net/guoyjoe/article/details/30965303   实验过程例如以下: 1.使用rman备份全库 Recovery Mana ...

  3. MySQL协议分析(2)

    MySQL协议分析(2) 此阶段是在压缩传输无加密条件下进行的协议分析 思路 结合Oracle官网的说明和自己用wireshark加python进行数据包分析 步骤 客户端与服务器端是否压缩的协商阶段 ...

  4. 子集和问题(应用--换零钱)POJ2229:Sumsets

    我一直在纠结换零钱这一类型的题目,今天好好絮叨一下,可以说他是背包的应用,也可以说他是单纯的dp.暂且称他为dp吧. 先上一道模板题目. sdut2777: 小P的故事——神奇的换零钱 题目描述 已知 ...

  5. HDU5003:Osu!(签到题)HDU5038:(签到题,题意很坑)

    HDU 5003 水题,直接上代码(因为题意读错了,WA了一遍). #include <iostream> #include <string.h> #include <s ...

  6. PKU 2352 Stars(裸一维树状数组)

    题目大意:原题链接 就是求每个小星星左小角的星星的个数.坐标按照Y升序,Y相同X升序的顺序给出由于y轴已经排好序,可以按照x坐标建立一维树状数组 关键是要理解树状数组中的c[maxn]数组的构成方式, ...

  7. vue-cli中的.babelrc文件介绍

    转载自:http://www.cnblogs.com/ye-hcj/p/7071850.html { // 此项指明,转码的规则 "presets": [ //个人认为多此一举 [ ...

  8. log4j相关配置

    1.概述         log4j是Apache提供的一个日志实现,可以用于我们项目中的日志记录,有log4j1和log4j2两个版本,本文使用log4j2这个版本.SLF4J(Simple log ...

  9. 运维自动化之salt笔记

    1:saltstack的基本介绍 2:salt的安装 1:服务端1:安装2:配置文件3:运行4:注意事项2:客户端1:安装2:配置文件3:运行4:注意事项 3:salt的使用: 1:基础知识1:tar ...

  10. NGUI混合FingerGesture《卷一》 统一坐标

    问题背景 使用FingerGesture 获取触碰点2D坐标, 将该2D坐标赋值给NGUI元素,发现位置出现偏差. 排查思路 1:NGUI的 (0,0,0)默认位置是在屏幕正中心.而FingerGes ...