【Win10】UAP/UWP/通用 开发之 x:Bind

【Win10】UAP/UWP/通用 开发之 x:Bind

[Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]

[涉及某信息预发布的版本可能在它的商业版本大幅修改。对于这里提供的信息,微软不作任何担保。]

在MSDN中,Windows 10 SDK 的东东上,都会声明这一句话,我也引过来吧啦,他不担保,我也保不了。

 

正文

  在Win10 UWP开发中,新加入了一个关键字 x:Bind. 它好在哪?为什么要用他。

  build大会视频资源:http://www.microsoftvirtualacademy.com/training-courses/a-developers-guide-to-windows-10-preview?prid=ch9courselink

一、x:Bind 好在哪?

从这两张画可以看出来,x:Bind的性能要优于Binding。为什么?

这个绑定被称为 "compiled data bindings", 从字面上看 编译的数据绑定。

我们以前常用的Binding,是运行时(Run Time)的绑定,而这个 在编译时(Build Time)就已经决定。

好处就是效率高,速度快,绑定的错误在编译时就会提示出来,方便调试。

二、x:Bind

x:Bind 主要的几点:

1. 强类型

2.上下文为page 或 UserControl

3.绑定的默认Mode为OneTime

我们用Binding的时候,有的时候可以不用去考虑类型,因为有好多默认的转换(如,TypeConverter),但是使用x:Bind时,如果类型不匹配编译时,就会出错。

例如:

<CheckBox IsChecked="{x:Bind}" />

我们把当前的上下文绑定到 IsChecked(bool?) 上

Invalid binding path '' : Cannot bind type 'BindDemo.MainPage' to 'System.Nullable(System.Boolean)' without a converter

结果就会这样子。当然,如果你绑到String类型的属性上是不会错的,他会帮你ToString()地。

而绑定的上下文,现在看来就是当前的类的本身了,就是继承自Page和UserControl的本身。

对于在初学的同学,再也不怕找不到对象了,也不用设置DataContext。

对于熟悉MVVM的同学,要用x:Bind 就要把ViewModel写到CodeBehand中一个,真心怪怪的说,好多框架可能也得调整啦。

三、小试牛刀

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"><TextBlock Text="{x:Bind}"VerticalAlignment="Center"HorizontalAlignment="Center" /></Grid>

CodeBehand不做任何代码啦.

结果:

 

从这结果也可以看出来,他的上下文,是当前的这个页。

咱们在CodeBehand里加一Title的属性。

    public sealed partial class MainPage : Page{public string Title { get; set; } = "Bind Demo";public MainPage(){this.InitializeComponent();}}
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"><TextBlock Text="{x:Bind Title}"VerticalAlignment="Center"HorizontalAlignment="Center" /></Grid>

这里,熟悉MVVM的人就要想了,我们怎么绑定ViewModel呢。其实就是把ViewModel的对象,写在CodeBehand里一个就好啦。

    public class MainViewModel{public string Name { get; set; } = "Bind";public string Content { get; set; } = "Demo";}
    public sealed partial class MainPage : Page{public string Title { get; set; } = "Bind Demo";public MainViewModel ViewModel { get; set; } = new MainViewModel();public MainPage(){this.InitializeComponent();}}
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"><StackPanel HorizontalAlignment="Center"><TextBlock Text="{x:Bind Title}" /><TextBlock Text="{x:Bind ViewModel.Name}" /><TextBlock Text="{x:Bind ViewModel.Content}" /></StackPanel></Grid>

结果

四、数据模板中使用

因为x:Bind 是强类型,所以你在使用DataTemplate的时候,要指定x:DataType,我们改写一下上面的例子。

CodeBehand的代码不用变,我们直接变Xaml中的。加一个Key为TestDataTmpleate的数据模板,为了区别,我们给一个背景色,把顺序也换一下.

<Page x:Class="BindDemo.MainPage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:BindDemo"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><Page.Resources><DataTemplate x:Key="TestDataTemplate"x:DataType="local:MainViewModel"><StackPanel Background="Orange"><TextBlock Text="{x:Bind Content}" /><TextBlock Text="{x:Bind Name}" /></StackPanel></DataTemplate></Page.Resources><Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"><StackPanel HorizontalAlignment="Center"><TextBlock Text="{x:Bind Title}" /><ContentControl ContentTemplate="{StaticResource TestDataTemplate}"Content="{x:Bind ViewModel}" /></StackPanel></Grid>
</Page>

结果:

如果,我们不设置x:DataType呢。他就会告诉我们这个Error。

 

五、绑定事件到方法

x:Bind 是支持事件绑定到方法的,例如我给MainViewModel 加一个Test方法。然后在数据模板中加一个Button。

Click这个不用想都支持,我就随便试了一个PointerEntered事件啦。

绑定的这个方法,可以不写参数,也可以把事件的参数写全。

        <DataTemplate x:Key="TestDataTemplate"x:DataType="local:MainViewModel"><StackPanel Background="Orange"><TextBlock Text="{x:Bind Content}" /><TextBlock Text="{x:Bind Name}" /><Button  PointerEntered="{x:Bind Test}" /></StackPanel></DataTemplate>

完美进入断点。

六、总结

  现在Binding也是可以一同使用的,至少不带表x:Bind可以全完替代Binding,至少在动态类型的绑定上,x:Bind是玩不转的。而且使用x:Bind 多少打乱一些我们已习惯的MVVM的结构。

  但是x:Bind所带来的性能的提升,真心让人心动,可以的话,可以尽量的使用这个。

 

本文只是我的x:Bind的初步理解,也没找到什么文档,如果有不对的地方,请大家指出来。谢谢。

本文地址:http://www.cnblogs.com/gaoshang212/p/4534138.html

 

posted on 2015-05-27 18:22 E不小心 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/gaoshang212/p/4534138.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

root 授予oracle权限,oracle – 列出具有root(管理)权限的用户

以下是您查找用户权限的方法&#xff1a;selectlpad( , 2*level) || granted_role "User, his roles and privileges"from(/* THE USERS */selectnull grantee,username granted_rolefromdba_users/* THE ROLES TO ROLES RELATIONS */unionselectgrantee,granted_rol…

(转)基于libRTMP的流媒体直播之 AAC、H264 推送

参考&#xff1a; 1&#xff0c;基于libRTMP的流媒体直播之 AAC、H264 推送 http://billhoo.blog.51cto.com/2337751/1557646转载于:https://www.cnblogs.com/tangxiacun/p/4536904.html

oracle outln用户,Oracle用户解锁

首先先连接上SQL*Plus: Release 12.1.0.2.0 Production on 星期四 2月 12 15:40:422015Copyright (c) 1982, 2014, Oracle. All rights reserved.请输入用户名: system输入口令:上次成功登录时间: 星期四 2月 12 2015 10:26:40 08:00连接到:Oracle Database 12c Enterprise …

Android 自定义属性(attrs.xml,TypedArray)

做Android布局是件很享受的事&#xff0c;这得益于他良好的xml方式。使用xml可以快速有效的为软件定义界面。可是有时候我们总感觉官方定义的一些基本组 件不够用&#xff0c;自定义组件就不可避免了。那么如何才能做到像官方提供的那些组件一样用xml来定义他的属性呢&#xff…

oracle的基本概念,oracle的基本概念

SQL语句&#xff1a;1、数据查询语句 SELECT2、数据定义语句 DDL 定义表、视图、索引3、数据操纵语句 DML INSERT、UPDATE、DELETE4、数据控制语句 DCL基本的数据类型&#xff1a;number(p,s) --> p个数字&#xff0c;s是p中小数点后的数字位数smal…

移动端单位解析

手机端开发单位到底用什么&#xff1f; 目前有3种&#xff0c;px&#xff0c;em &#xff0c;rem PC端大部份是用px单位&#xff0c;小部分用em单位&#xff0c;而移动端&#xff0c;请全部用rem单位吧。目前大部份设备&#xff0c;包括但不限于iOS 5、Android 2.3、Window Pho…

oracle fiscal year,Version 0 is not defined for fiscal year 2007.

最初由 itpuber.net 发布[B]select version "0" maintain "setting for each fiscal year", try it [/B]but when i maintain versionActivation of the indicator is not permittedMessage no. KT253DiagnosisYou activated an indicator (Plan, Actual, …

CCNA training notes

5/29: vlan&#xff1a;virtual lan, 通过PVID来将物理上连通的host/PC划分到不同的局域网。switch的每个port有access与trunk两种mode&#xff0c;trunk模式的port属于所有vlan&#xff08;所有vlan的消息都能被转发&#xff09;。某个vlan的路径上的所有switch都要有该valn&a…

php js下拉框与文本联动,php mysql js 下拉框 二级联动

JS代码function changeappid(){var appiddocument.getElementById("appid").value;$result TSMLDB::getInstance()->select_sql("select f.appid,t.ftypeid,t.typename from wfappform f join wfformtype t on f.ftypeidt.ftypeid");$apptype array()…

SRS文档

负责人&#xff1a;韩朝燕 1什么是用例&#xff1f; 在介始用例方法之前&#xff0c;我们首先来看一下传统的需求表述方式-"软件需求规约"(Software Requirement Specification)。传统的软件需求规约基本上采用的是功能分解的方式来描述系统功能&#xff0c;在这种表…

automapper的简单用法

AutoMapper对象转换方面&#xff08;Object-Object Mapping&#xff09;对象映射工具&#xff0c;实现对象和对象之间的转化。主要应用在项目的dto&#xff0c;model&#xff0c;entity或viewmodel之间转换&#xff0c;其实AutoMapper涵盖所有对象&#xff08;Object&#xff0…

linux重启网卡的命令行,linux系统重启网卡命令

关于win10系统开机总是要禁用重启网卡才能联网如何解决就为大家介绍到这边了&#xff0c;有遇到同样情况的用户们可以采取上面的方法步骤来解决。问题2已知win7下不需要删除qos协议&#xff0c;在跑无盘模式下以前最好不要安装厂商网卡驱动或修改win7网络协议种类&#xff0c;某…

TMemo的ScrollBars属性和大文本

给TMemo.Text : 几M大的文本; 如果 ScrollBars 不是 sbBoth的话&#xff0c;程序很可能 无响应。 今天郁闷了半天才发现的。 转载于:https://www.cnblogs.com/CodeGear/p/4542587.html

JS判断客户端是否是iOS或者Android

<script type"text/javascript"> var u navigator.userAgent, app navigator.appVersion; var isAndroid u.indexOf(Android) > -1 || u.indexOf(Linux) > -1; //android终端或者uc浏览器 var isiOS !!u.match(/\(i[^;];( U;)? CPU.Mac OS X/); //i…

linux nginx 缓存服务器,如何开启Nginx缓存

众所周知&#xff0c;Nginx是一个高性能的web服务器&#xff0c;尤其在高并发和处理静态页面的时候有先天的优势&#xff1b;很大一部分得益于缓存的开启&#xff0c;那么如何开启nginx的缓存呢。简单来说可以分两步&#xff1a;1.定义缓存存储目录并指定共享内存空间2.在locat…

在im4java中使用GraphicsMagick

1.定义操作和命令GMOperation op new GMOperation();GraphicsMagickCmd cmd new GraphicsMagickCmd("convert"); //convert说明你要做的是convert里面的操作或ConvertCmd cmd new ConvertCmd(true); //true说明你要用的是gm工具 2.缩放的参数说明op.resize(int wi…

linux 分步编译命令,GCC分步编译C++程序(汇总版)

通过前面几节的讲解&#xff0c;已经就 gcc(g)指令可用的 -E、-S、-c 以及 -o 选项的功能和用法做了详细的讲解。在此基础上&#xff0c;本节将对“如何分步编译C/C程序”这个问题做一个完整的解答。接下来&#xff0c;我将以 g 指令分别对 C 源程序做预处理、编译、汇编和链接…

linux 安装u盘软件,Universal USB Installer:帮你用U盘装Linux

近期&#xff0c;Linux系统U盘制作安装工具&#xff1a;Universal USB Installer迎来了v1.9.5.1版本&#xff0c;新版支持了OpenSuse 32/64bit系统平台&#xff0c;欢迎Linux桌面爱好者下载使用。Universal USB Installer工具&#xff0c;类似一款U盘制作工具&#xff0c;允许用…

lucene 高亮显示

原文地址&#xff1a; http://blog.csdn.net/javaman_chen/article/details/8224407 Lucene针对高亮显示功能提供了两种实现方式,分别是Highlighter和FastVectorHighlighter。 顾名思义&#xff0c;FastVectorHighlighter较Highlighter速度更快&#xff0c;功能也更强大&…

linux rsync 安装教程,linux下的rsync配置和使用教程

本试验的测试环境使用的系统是Redhat AS4(2台&#xff0c;一个服务端&#xff0c;一个客户端)rsync服务端的ip&#xff1a;192.168.23.102rsync客户端的ip&#xff1a;192.168.23.100&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&am…