现在是msp候选人,是时候写点技术博客来加分了(实则是个人的心得体会)。

注:以下都是个人理解,错误在所难免,欢迎批评指正

以前接触过WPF,只会简单的一些操作,现在在逐渐学习UWP(Universal Windows Platform)开发,当然也接触过WP8.1的开发。总之他们都挺像的,直观感受就是:XAML+CS(当然c++,vb之类的也行)。在这之中有个非常厉害的技术——数据绑定(DataBind)。既然是绑定,就是在两(多)个对象之间,按照某种规则,建立起来一种联系,联系的内容就是数据。

学习数据绑定先大概了解两个概念:

  1.数据源:提供数据的地儿

  2.绑定目标:接受绑定的对象

现在把常用情形分类指出:

一.两个控件之间的绑定:

  最常用的例子,把一个文本框的内容显示(或者实时显示)在一个标签中,又或者通过一复选框来控制一个控件的可见性(Visibility),这儿还会引出一个值转换器(Converter)的概念.

  下面就针对这两种实际情况给出示例代码。

  DEMO1:把一个文本框的内容显示(或者实时显示)在一个标签中,

<TextBox x:Name="tbInput"></TextBox>
<TextBlock x:Name="tbOutput" Text="{Binding ElementName=tbInput,Path=Text,Mode=OneWay }"></TextBlock>

  这种绑定只需要在XAML中设置绑定关系即可。简单易用。  

分析一下:第一个TextBox是数据源,TextBlock是绑定目标,因为我们是把TextBox的Text属性绑定到TextBlock的Text属性上,所以需要在TextBlock的Text属性上设置绑定,

       语法如上面代码第二行所示,

       ElementName:数据源的名称(Name属性)

       Path:指明数据源的具体属性

       Mode:是一个枚举值,有OneTime,OneWay,TwoWay三种方式,分别表示绑定一次,单向绑定,双向绑定。其中单向是指绑定目标的数据受数据源影响,但不影响数据源;

          双向是指数据源和绑定目标互相影响,其中一个变了,另一个也跟着变。

  DEOM2:通过一复选框来控制一个控件的可见性(Visibility)

<Page.Resources>
  <local:DataConverter x:Key="converter"></local:DataConverter>
</Page.Resources>
<CheckBox x:Name="cbState" IsChecked="True"></CheckBox>
<TextBlock x:Name="tbInfo" Visibility="{Binding Path=IsChecked,ElementName=cbState, Mode=OneWay,Converter={StaticResource ResourceKey=converter}}">你能看见我吗</TextBlock>

值转换器代码:

public class DataConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
bool? ischeched = value as bool?;
if (ischeched == null || ischeched == false)
{
return Visibility.Collapsed;
}
else
{
return Visibility.Visible;
}
} public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}

      这第二个实例的代码看着有些烦,但是仔细理解还是很简单的。

      先来分析一下需求:

        当CheckBox的IsChecked属性为True时,TextBlock的Visibilty属性为Visible;

        当CheckBox的IsChecked属性为False时,TextBlock的Visibilty属性为Collapsed.

      即True对应Visiblle,Flase对应Collapsed,如果按照我们之前Demo1的写法,应该是

      Visibility="{Binding Path=IsChecked,ElementName=cbState, Mode=OneWay}"

      但是这么写后会发现运行后无效果,因为系统根本就不知道CheckBox的IsChecked属性和TextBlock的Visilibity属性之间有什么对应关系,

      而值转换器(ValueConverter)就是提供这种对应关系的东西。

      之前的DEMOE1中不需要我们显示指定一个值转换器,因为他们的Text属性都是string类型,类型一致,系统就会自动帮我们完成值转换的工作!

但是我们的Demo2就不行了,系统猜不出来我们到底是怎么完成对应关系的,需要我们自己动手写!

      代码如上,我们定义一个类DataConverter,让他继承自IValueConverter,这个接口定义了两个方法

        Convert是从数据源到绑定目标的转换;

        ConvertBack是从绑定目标到绑定源的转换(在这个demo中我们是单向绑定,所以不需要实现这个接口,让它保持默认情况即可,但是不能吧这个方法删掉,这样编译会报错,原因你应该懂)

      在Convert方法中,

          value代表需要被转换的值,在我们的这个demo中,他可能为True,False,null

          targetType代表最终需要的数据得类型,这个demo中是Visibilty枚举类型!

      然后我们在Convert中根据value的类型,返回相应的Visibilty枚举值即可!

  综上,Demo1和Demo2都很简单,都是两个系统控件之间的绑定。他们只需要我们手写很少的c#代码就能出色的完成绑定任务!

  好了,强迫症犯了。之几种情形见下一篇博文。

[uwp开发]数据绑定那些事(1)的更多相关文章

  1. [uwp开发]数据绑定那些事(2)

    接着上一篇来侃. 二.实体到控件之间的绑定 这儿不知道用实体这个词恰不恰当,凑活着理解就行了.他可以是一个类实例,也可以是一个集合. 所以,相应的我们就引入两个Demo,第一个介绍用简单的类作为作为数 ...

  2. uwp开发:数据绑定——值转换器 的简单使用

    原文:uwp开发:数据绑定--值转换器 的简单使用 今天,我在做最近正在开发的“简影”uwp应用时遇到一个问题,其中有个栏目,叫做“画报”,是分组显示一组一组的 图片,每组图片在界面上只显示9个,点击 ...

  3. UWP开发小结

    做了两天的UWP开发,上手还是挺快的,不过比较郁闷的是总会被一些很简单的细节卡住很久. 首先当然是用C#修改xaml界面这个难点了,Bing搜了好久都没找到相关信息,最后还是老司机伟神指点的我.对于g ...

  4. Windows 10 UWP开发:如何去掉ListView默认的选中效果

    原文:Windows 10 UWP开发:如何去掉ListView默认的选中效果 开发UWP的时候,很多人会碰到一个问题,就是ListView在被数据绑定之后经常有个默认选中的效果,就像这样: 而且它不 ...

  5. 领域驱动和MVVM应用于UWP开发的一些思考

    领域驱动和MVVM应用于UWP开发的一些思考 0x00 起因 有段时间没写博客了,其实最近本来是根据梳理的MSDN上的资料(UWP开发目录整理)有条不紊的进行UWP学习的.学习中有了心得体会或遇到了问 ...

  6. UWP开发必备:常用数据列表控件汇总比较

    今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...

  7. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

    安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...

  8. UWP开发之控件:用WebView做聊天框

    目录 说明 WebView存在的价值 使用WebView的几个重要技巧 使用WebView做的聊天框 说明 大家都知道,无论是之前的Winform.WPF还是现在的IOS.Android开发中,都存在 ...

  9. Win10 UWP 开发系列:使用SQLite

    在App开发过程中,肯定需要有一些数据要存储在本地,简单的配置可以序列化后存成文件,比如LocalSettings的方式,或保存在独立存储中.但如果数据多的话,还是需要本地数据库的支持.在UWP开发中 ...

随机推荐

  1. 读取Jar包中的资源问题探究

    最近在写一个可执行jar的程序,程序中包含了2个资源包,一个是images,一个是files.问题来了,在Eclipse里开发的时候,当用File类来获取files下面的文件时,没有任何问题.但是当程 ...

  2. HBase优化

    1.hbase的balance策略是region数量策略,即维持每个regionserver的region数量基本一致,这并未考虑一个table的region可能都落到一个refionserver的不 ...

  3. javaSE第二十天

    第二十天    254 1:递归(理解)    254 (1)方法定义中调用方法本身的现象    254 (2)递归的注意事项    255 (3)递归的案例:    255 A:递归求阶乘    2 ...

  4. 从手机获取图片让WebView支持本地上传图片

    一,从本地获取相册中的图片,并获取图片的URI 从本地选择图片上传到服务器时,首先要打开本地图片或文件管理器选择要上传的文件,代码如下 Intent intent =newIntent(Intent. ...

  5. linux查找日志常用命令

    1.查找文件test中目标字符串(xxxx)出现的行数位置grep -n xxxx  test 2.文件test从某一行(n)开始显示more +n  test 3.查询文件test中出现目标字符串x ...

  6. rhythmbox插件开发笔记1:简介&入门

    rhythmbox是gnome下一款开源的音乐播放软件.ubuntu和fedora的桌面环境中均默认安装了rhythmbox. rhythmbox架构非常灵活,几乎所有地方都可以用插件来修改.用户想实 ...

  7. Mvc多级Views目录

    一般我们在mvc开发过程中,都会碰到这样的问题.页面总是写在Views文件夹下,而且还只能一个Controller的页面只能写在相应的以Controller名命名的文件夹下.如果我们写到别处呢?那么肯 ...

  8. WIN8+VS2013编写发布WCF之二(部署)

    上文简介了如何建立WCF工程并且调试,下面说一下如何部署. 本文将陆陆续续讲述三种部署方式,随着项目的进展将不断补全. 声明: 用管理员身份打开VS2013,发布前请将程序的.net版本改成与服务器相 ...

  9. [转]Posix-- 互斥锁 条件变量 信号量

    这是一个关于Posix线程编程的专栏.作者在阐明概念的基础上,将向您详细讲述Posix线程库API.本文是第三篇将向您讲述线程同步. 互斥锁 尽管在Posix Thread中同样可以使用IPC的信号量 ...

  10. 刀哥多线程全局队列gcd-09-global_queue

    全局队列 是系统为了方便程序员开发提供的,其工作表现与并发队列一致 全局队列 & 并发队列的区别 全局队列 没有名称 无论 MRC & ARC 都不需要考虑释放 日常开发中,建议使用& ...