{x:bind}是随着UWP被推出而被添加的,可以说是Win10 UWP开发专有扩展。虽然 {x:Bind} 缺少{Binding} 中的一些功能,但它运行时所花费的时间和使用的内存量均比 {Binding} 要少,且支持更好的调试。

参照网址:{x:Bind} 标记扩展GitHub微软UWP实例之XamlBind

1,{x:Bind} 基本原理

在 XAML 加载时,{x:Bind} 将转换为你所需的绑定对象,此对象将从数据源上的某一属性中获取相关值。绑定对象可以配置为观察数据源属性值的更改,并基于这些更改自行刷新。该对象也可以配置为将其自己的值的更改推送回源属性。

2,{x:bind}{Binding}两者区别

  • {x:Bind}{Binding} 创建的绑定对象在功能上大致等同。
  • {x:Bind} 执行编译时所生成的专用代码,而 {Binding} 使用通用的运行时对象检查。
  • {x:Bind} 绑定(通常指已编译的绑定)具有出色的性能、提供编译时对绑定表达式的验证,并支持通过允许你在作为页面的部分类生成的代码文件中设置断点进行调试。可以在 obj文件夹中找到这些文件,其名称类似于(适用于 C#)<view name>.g.cs
  • {x:Bind} 不将 DataContext 用作默认源 — 它将改用页面或用户控件本身。因此,它将针对属性、字段和方法查找代码隐藏的页面或用户控件。要向 {x:Bind} 显示视图模型,你通常需要将新字段或属性添加到代码隐藏的页面或用户控件。属性路径中的步骤由点号分隔 (.),并且可包含多个分隔符以遍历连续的子属性。
  • 使用 x:Bind 时,无需将 ElementName=xxx 用作绑定表达式的一部分。使用 x:Bind 时,你可以使用元素的名称作为绑定路径的第一部分,因为已命名的元素变为表示根绑定源的页面或用户控件内的字段。
  • 事件绑定是编译绑定的一项新功能。它允许你使用绑定为事件指定处理程序,而无需使其成为代码隐藏的方法。
  • 在将 {x:Bind} 用于数据模板时,需通过设置 x:DataType 值来指示要绑定到的类型,你也可以将类型设置为接口或基类类型,然后按需使用转换,从而编写一个完整的表达式。

3,{x:Bind}基本用法

<object property="{x:Bind}" .../> -or- <object property="{x:Bind propertyPath}" .../> -or- <object property="{x:Bind bindingProperties}" .../> -or- <object property="{x:Bind propertyPath, bindingProperties}" .../>

 
propertyPath 一个指定绑定的属性路径的字符串
bindingProperties

propName=value[, propName=value]*

使用一个名称/值对语法指定的一个或多个绑定属性

propName 要在绑定对象上设置的属性的字符串名称
value 要将属性设置为的值。参数的语法取决于要设置的属性。

备注:PropertyPath{x:Bind} 表达式设置 PathPath 是一个属性路径,用于指定要绑定到的(源)属性、子属性、字段或方法的值。你可以明确指出 Path 属性名称:{Binding Path=...}。也可以将其省略:{Binding ...}

4,{x:Bind}属性设置

Path 属性路径
Converter 指定绑定引擎所调用的转换器对象。转换器可在 XAML 中设置,但只能在你引用已在 XAML 中的 ResourceDictionary中分配的对象实例时设置。你可以使用资源字典中对该对象的 {StaticResource} 标记扩展引用。
ConverterLanguage 指定转换器要使用的区域性。(如果你要设置 ConverterLanguage,则还应设置 Converter。)区域性可设置为一个基于标准的标识符。有关详细信息,请参阅 ConverterLanguage
ConverterParameter 指定可在转换器逻辑中使用的转换器参数。 (如果你要设置 ConverterParameter,则还应设置 Converter。)大多数转换器使用可从要转换的传递值获取所有所需信息的简单逻辑,不需要 ConverterParameter值。ConverterParameter 参数适用于具有多个逻辑的中等高级转换器实现,这些逻辑可切断传入ConverterParameter 的内容。你可以编写一个转换器,使用除字符串之外的值,但这种情况并不常见,请参阅ConverterParameter 中的备注,以获取详细信息。
FallbackValue 指定要在无法解析源或路径时显示的值。
Mode 将绑定模式指定为以下一种字符串:"OneTime"、"OneWay" 或 "TwoWay"。默认值是 "OneTime"。请注意,该值不是{Binding} 的默认值,大多数情况下为"OneWay"。
TargetNullValue 指定要在源值解析但并非显式 null 时显示的值。

备注:OneTime只作为显示,OneWay实现了INotifyPropertyChanged的属性接收状态变更,TwoWay实现了INotifyPropertyChanged的交互属性。

5,常见例子

  • Text="{x:Bind Employee.FirstName}" 绑定成员
  • Text="{x:Bind Model.Employees[0].Name}"绑定集合对象成员
  • Text="{x:Bind Model.ManagerProp.ReportsOC[0].Name, Mode=OneTime}"深层次绑定
  • Text="{x:Bind Model.Employees[0], Mode=OneTime}"绑定对象自动调用ToString()方法输出字符串
  • Value="{x:Bind Model.IntPropertyDP, Mode=TwoWay, Converter={StaticResource IntToDouble}}"
  • Visibility="{x:Bind Model.BoolPropWithINPC, Mode=OneWay, Converter={StaticResource BoolToVisibility}}"
  • Text="{x:Bind LocalTextBox.Text.Length, Mode=OneWay}"
  • Grid.Column="{x:Bind Model.IntPropWithINPC, Mode=OneWay}"
  • Grid.Column="{x:Bind OneTimeSlider3.Value, Mode=OneWay, Converter={StaticResource DoubleToInt}}"
  • Text="{x:Bind Background.(SolidColorBrush.Color), FallbackValue='This is my fallback value', Mode=OneWay}"
  • Text="{x:Bind NullStringProperty, TargetNullValue='This is a null string property'}"
  • Text="{x:Bind Button22.(Grid.Row)}" 绑定附加属性
  • Text="{x:Bind obj.(TextBox.Text)}"obj 为类型对象的属性,包含一个文本框
  • Text="{x:Bind groups3[0].(data:SampleDataGroup.Title)}"groups3 字段是一个对象字典,必须将其转换为data:SampleDataGroup
  • Click="{x:Bind rootFrame.GoForward}"事件绑定

public void GoForward(object sender, RoutedEventArgs e){}

private void GoForward(){}

private void GoForward(object sender, object e){}

对于事件,目标方法不能重载,而且还必须:

  • 匹配事件的签名。
  • 或者没有任何参数。
  • 或者具有相同数量的参数类型,这些参数根据事件参数的类型进行赋值。

在生成的代码隐藏中,已编译的绑定将处理事件并将其路由到模型上的对应方法,并在该事件发生时计算绑定表达式的路径。这意味着,与属性绑定不同的是,它不跟踪模型的更改。

UWP开发之Mvvmlight实践四:{x:bind}和{Binding}区别详解的更多相关文章

  1. UWP开发之Mvvmlight实践七:如何查找设备(Mobile模拟器、实体手机、PC)中应用的Log等文件

    在开发中或者后期测试乃至最后交付使用的时候,如果应用出问题了我们一般的做法就是查看Log文件.上章也提到了查看Log文件,这章重点讲解下如何查看Log文件?如何找到我们需要的Packages安装包目录 ...

  2. UWP开发之Mvvmlight实践九:基于MVVM的项目架构分享

    在前几章介绍了不少MVVM以及Mvvmlight实例,那实际企业开发中将以那种架构开发比较好?怎样分层开发才能节省成本? 本文特别分享实际企业项目开发中使用过的项目架构,欢迎参照使用!有不好的地方欢迎 ...

  3. UWP开发之Mvvmlight实践八:为什么事件注销处理要写在OnNavigatingFrom中

    前一段开发UWP应用的时候因为系统返回按钮事件(SystemNavigationManager.GetForCurrentView().BackRequested)浪费了不少时间.现象就是在手机版的详 ...

  4. UWP开发之Mvvmlight实践三:简单MVVM实例开发(图文详解付代码)

    在做MVVM各种框架对比之前,我觉得有必要先自己做一个简单的MVVM实现案例比较好,这样就可以看到自己实现的时候有那些不方便的地方.而各种框架又是怎么解决我们这些麻烦的. 案例介绍:用户登录画面,没有 ...

  5. UWP开发之Mvvmlight实践二:Mvvmlight的核心框架MVVM与MVC、MVP的区别(图文详解)

    最近UWP开发在海外很潮流,随着微软收购Xamarin,我们这些C#程序员也可以靠这杆小米枪挑战Android,IOS平台了. 那我们为什么选择MVVM做UWP开发?MVC,MVP,MVVM他们之间到 ...

  6. UWP开发之Mvvmlight实践一:如何在项目中添加使用Mvvmlight(图文详解)

    最近一直在做UWP开发,为了节省成本等等接触到MVVMlight,觉得有必要发点时间研究它的用法与实现原理才行.如果有问题的地方或者有好的建议欢迎提出来. 随着移动开发的热门,Mvvmlight在An ...

  7. UWP开发之Mvvmlight实践六:MissingMetadataException解决办法(.Net Native下Default.rd.xml配置问题)

    最近完成一款UWP应用,在手机端测试发布版(Release)的时候应用莫名奇妙的强行关闭,而同样的应用包在PC端一点问题都没有,而且Debug版在两个平台都没有问题,唯独手机的Release版有问题. ...

  8. UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理

    最近比较忙有一段时间没有更新了,再接再厉继续分享. 案例下载:https://github.com/NewBLife/UWP/tree/master/SuspendSample 先我们看看App在生命 ...

  9. UWP开发之Template10实践:本地文件与照相机文件操作的MVVM实例(图文付原代码)

    前面[UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理]章节已经提到过Template10,为了认识MvvmLight的区别特做了此实例. 原代码地址:ht ...

随机推荐

  1. duplicate symbols for architecture arm64 after xCode 8.0 update

    Xcode IDE  从7.3.1 update 到 8.0 之后出现的问题 一个错误把我困扰了两天之久,最终找到解决办法我欣喜若狂. 错误发生原因:Xcode IDE  从7.3.1 update ...

  2. mathlab之floor,ceil,round,int以及fix函数

    建议自己动手敲敲,网上很多人自己都没搞清楚然后好多错的.毕竟自己亲眼看到结果才有说服力. 以下是我亲眼见到的结果. 1.double floor(double)函数 floor()函数是常用的取整函数 ...

  3. STL之priority_queue

    下面以 long long 型队列介绍: Q.empty() // 判断队列是否为空 返回ture表示空 返回false表示空 bool Q.top() // 返回顶端元素的值 元素还在队列里 lon ...

  4. C# 开源组件--Word操作组件DocX

    使用模版生成简历 读写表格数据 合并单元格 工具源代码下载 学习使用 使用模版生成简历 下面将以一个简历实例来讲解DocX对表格的操作,先看看生成的效果 private static void Cre ...

  5. 谢欣伦 - 原创软件 - 游戏专题 - 我的桌面My Desktop

    今天在网上看到一个用桌面背景当做拼图内容的游戏很新颖,反正今天下雨我也闲着,索性用了半天时间做了一个类似的游戏<MyDesktop>.做完后立即分享给了两个朋友,他俩都被吓坏了.现在分享给 ...

  6. PHP基础知识之变量

    定义: 变量用一个美元符号后面跟变量名来表示,如:$user 变量引用赋值: 引用赋值用一个&后面跟源变量名来表示,如:$copy=&$user(注:$bar = &(24 * ...

  7. Linux下的Finger指令

    Linux finger命令 Linux finger命令可以让使用者查询一些其他使用者的资料.会列出来的资料有: Login Name User Name Home directory Shell ...

  8. .NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)

    说说WebForm: 数据列表控件: WebForm 下的列表绑定控件基本就是GridView.DataList.Repeater:当然还有其它DropDownList.ListBox等. 它们的共同 ...

  9. Reactive Extensions(Rx) 学习

    Bruce Eckel(著有多部编程书籍)和Jonas Boner(Akka的缔造者和Typesafe的CTO)发表了“反应性宣言”,在其中尝试着定义什么是反应性应用. 这样的应用应该能够: 对事件做 ...

  10. 写一个脚本,自动启动tomcat

    我的服务器是使用tomcat的,时不时tomcat的进程会突然结束掉,不知道为什么,从日志上看也没有任何可疑之处,貌似就这样突然没了,接下来的日志都是重新启动tomcat之后打印的了.原因找不到,但要 ...