WPF Binding学习(三)

转自;http://blog.csdn.net/lisenyang/article/details/18312199

1.控件与控件间的双向绑定

WPF还支持控件作为数据源,

 <TextBox Name="txt_Source" Width="120" HorizontalAlignment="Left"></TextBox>
 <TextBox Text="{Binding ElementName=txt_Source,Path=Text}" Name="txt_Target" Width="120" HorizontalAlignment="Left">

上面代码就可以实现控件之间的双向绑定,我们发现我们的绑定数据源不是Source,而是ElementName.

当然我们也可以使用代码来实现

 Binding binding = new Binding("Text") { Source = this.txt_Source };
            this.txt_Target.SetBinding(TextBox.TextProperty, binding);

使用代码绑定我们依然使用的Source来绑定数据源

2.多级路径

WPF支持多级路径,也就是我们通俗的说“点”下去。

我们改下上面的代码

 Binding binding = new Binding("Text.Length") { Source =this.txt_Source,Mode = BindingMode.OneWay };
 this.txt_Target.SetBinding(TextBox.TextProperty, binding);

注意:因为源数据和目标数据无法做到匹配,所以无法双向绑定。

我们可以看到我们绑定的数据是Text属性中的Length属性,这就是我们所谓的多级路径.

3.索引绑定

我们知道,集合类型是索引器(Indexer)又称为带参属性。既然是属性,索引器也能作为Path来使用,比如我们想让一个TextBox显示另外一个TextBox的第1个字符

 Binding binding = new Binding("Text[1]") { Source =this.txt_Source,Mode = BindingMode.OneWay };
            this.txt_Target.SetBinding(TextBox.TextProperty, binding);

4.集合绑定

当使用一个集合或者DataView做为数据源时,如果我们想把它默认的元素做为数据源使用,则需要使用下面的语法:

  List<string> list = new List<string>() { "狗娃","狗剩2"};
  txt_List1.SetBinding(TextBox.TextProperty, new Binding("/") { Source = list, Mode = BindingMode.OneTime });
  txt_List2.SetBinding(TextBox.TextProperty, new Binding("/[1]") { Source = list,Mode = BindingMode.OneTime });
  txt_List3.SetBinding(TextBox.TextProperty, new Binding("/Length") { Source = list, Mode = BindingMode.OneTime });

效果如下

如果想要绑定绑定第二个元素,则直接使用"点"即可

  List<string> list = new List<string>() { "狗娃","狗剩2"};
  txt_List1.SetBinding(TextBox.TextProperty, new Binding("[1]") { Source = list, Mode = BindingMode.OneTime });
  txt_List2.SetBinding(TextBox.TextProperty, new Binding("[1].[1]") { Source = list,Mode = BindingMode.OneTime });
  txt_List3.SetBinding(TextBox.TextProperty, new Binding("[1].Length") { Source = list, Mode = BindingMode.OneTime });

如果想把子集集合中元素作为Path,可以使用多级斜线方法(一路"斜线"下去);

我们创建一个省市区关系的类型

 public  class Province
    {
        public string Name { get; set; }
        public IList<City> Citys { get; set; }
    }
    public class City
    {
        public string Name { get; set; }
        public IList<District> Districts { get; set; }
    }
    public class District
    {
        public string Name { get; set; }
    }

然后我们使用多级斜线进行绑定

  List<Province> list = new List<Province>()
            {
                new Province
                {
                    Name ="河北",
                    Citys = new List<City>
                    {
                        new City
                        {
                            Name = "邯郸",
                            Districts = new List<District>{ new District { Name="邯山区"} }
                        } } } };
  txt_List1.SetBinding(TextBox.TextProperty, new Binding("/Name") { Source = list, Mode = BindingMode.OneTime });
  txt_List2.SetBinding(TextBox.TextProperty, new Binding("/Citys/Name") { Source = list, Mode = BindingMode.OneTime });
  txt_List3.SetBinding(TextBox.TextProperty, new Binding("/Citys/Districts/Name") { Source = list, Mode = BindingMode.OneTime });

当然也可以使用多级"点"进行绑定

 txt_List1.SetBinding(TextBox.TextProperty, new Binding("[0].Name") { Source = list, Mode = BindingMode.OneTime });
 txt_List2.SetBinding(TextBox.TextProperty, new Binding("[0].Citys[0].Name") { Source = list, Mode = BindingMode.OneTime });
 txt_List3.SetBinding(TextBox.TextProperty, new Binding("[0].Citys[0].Districts[0].Name") { Source = list, Mode = BindingMode.OneTime });

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏更流畅、简洁的软件开发方式

我的数据访问类(第二版)—— for .net2.0 (二)

下面写一下相对来说不变的地方 SQL语句部分,改成了静态函数的形式。 using System; using System.Collections.Generi...

1538
来自专栏飞扬的花生

C#中返回值封装

      在平时开发过程中常常需要取一个方法的返回值,BOSS写了一个返回值类,做个练习以备不时之需: 返回值支持泛型和非泛型 先贴上代码: 非泛型返回值类:...

25410
来自专栏hbbliyong

C#基础知识回顾-- 反射(4)

从程序集获得类型   先说点题外话,现在技术真的发展太快了。我这边还很多东西半生不熟 呢,那边又出现了好多有趣的新东西让你眼红不已。学还是不学这还真是 个问题。...

2856
来自专栏丑胖侠

《Drools7.0.0.Final规则引擎教程》番外实例篇——FactHandler使用案例

背景 在使用具体的业务使用中,我们经常会通代码对Fact对象进行操作,Drools为我们提供了FactHandler来获取对象的句柄,通过此返回值可以对Work...

2675
来自专栏.NET开发者社区

C# WINFORM通过委托和事件窗体间(跨窗体)传值(自定义事件参数)--实例详解

C# WINFORM通过委托和事件窗体间(跨窗体)传值(自定义事件参数)--实例详解 在C# WINFORM的日常开发中,我们通常需要遇到跨窗体传值这一问题,实...

7166
来自专栏Ken的杂谈

【问题解决】Mono下部署ASP.NET应用提示:System.IO.FileNotFoundException

也就是站点启动时找不到站点根目录bin文件夹中的roslyn编译器 由于Mono不兼容roslyn那我们只能考虑改用msbuild 一个项目的编译信息是由.cs...

2442
来自专栏好好学java的技术栈

java爬虫带你爬天爬地爬人生,爬新浪

HttpClient是Apache Jakarta Common下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持...

1922
来自专栏博客园

WPF Binding学习(四) 绑定各种数据源

在这里我们使用了ListView控件和GridView控件来显示数据,这两个控件从表面来看应该属于同一级别的控件。实际上并非如此!ListView是ListBo...

2293
来自专栏跟着阿笨一起玩NET

浅谈WebService开发(一)

       简单通俗来说,就是企业之间、网站之间通过Internet来访问并使用在线服务,一些数据,由于安全性问题,不能提供数据库给其他单位使用,这时候可以使...

3353
来自专栏Create Sun

code first 创建和初始化数据库

1.前言   Code First是Entity Framework提供的一种新的编程模型。通过Code First我们可以在还没有建立数据库的情况下就开始编码...

3898

扫码关注云+社区

领取腾讯云代金券