现在是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. C#基础-ref、out

    1.默认情况下,C#假定所有的方法参数传递都是传值的. 如下面的方法: public static void Main(string[] args) { int val = 5; //调用AddVal ...

  2. nginx + php +mysql (适配thinkphp)

    Nginx 单机配置 http://tengine.taobao.org/book/index.html (taobao book) http://ubuntuhandbook.org/index.p ...

  3. NodeJs 中的Crypto 加密模块

    加密技术通常分为两大类:“对称式”和“非对称式”. 对称式加密: 就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是 ...

  4. CentOS 6.4下通过YUM快速安装配置LAMP服务器(Apache+PHP5+MySQL)

    准备篇: 1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dp ...

  5. 编程作业—C++初探 简单的学生信息处理程序实现

    简单的学生信息处理程序实现 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 ...

  6. 视频特效制作:如何给视频添加边框、水印、动画以及3D效果

    2014-12-08 09:47 编辑: suiling 分类:iOS开发 来源:叶孤城的blog 招聘信息: iOS手机软件开发工程师 iOS工程师 Web后端高级开发工程师 iOS软件工程师 ja ...

  7. LevelDB源码之五Current文件\Manifest文件\版本信息

    版本信息有什么用?先来简要说明三个类的具体用途: Version:代表了某一时刻的数据库版本信息,版本信息的主要内容是当前各个Level的SSTable数据文件列表. VersionSet:维护了一份 ...

  8. 正确使用stl map的erase方法

    先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是: map.era ...

  9. 【深入比较ThreadLocal模式与synchronized关键字】

    [深入比较ThreadLocal模式与synchronized关键字]ThreadLocal模式与synchronized关键字都是用于处理多线程并发访问变量的问题.只是两者处理问题的角度和思路不同. ...

  10. DOS下无法调出中文输入法-Solved

    From:http://www.cnblogs.com/killerlegend/p/3750542.html Author:KillerLegend Date:2014.5.24 DOS下无法打开中 ...