UWP开发之Mvvmlight实践四:{x:bind}和{Binding}区别详解
{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} 表达式设置 Path。Path 是一个属性路径,用于指定要绑定到的(源)属性、子属性、字段或方法的值。你可以明确指出 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}区别详解的更多相关文章
- UWP开发之Mvvmlight实践七:如何查找设备(Mobile模拟器、实体手机、PC)中应用的Log等文件
在开发中或者后期测试乃至最后交付使用的时候,如果应用出问题了我们一般的做法就是查看Log文件.上章也提到了查看Log文件,这章重点讲解下如何查看Log文件?如何找到我们需要的Packages安装包目录 ...
- UWP开发之Mvvmlight实践九:基于MVVM的项目架构分享
在前几章介绍了不少MVVM以及Mvvmlight实例,那实际企业开发中将以那种架构开发比较好?怎样分层开发才能节省成本? 本文特别分享实际企业项目开发中使用过的项目架构,欢迎参照使用!有不好的地方欢迎 ...
- UWP开发之Mvvmlight实践八:为什么事件注销处理要写在OnNavigatingFrom中
前一段开发UWP应用的时候因为系统返回按钮事件(SystemNavigationManager.GetForCurrentView().BackRequested)浪费了不少时间.现象就是在手机版的详 ...
- UWP开发之Mvvmlight实践三:简单MVVM实例开发(图文详解付代码)
在做MVVM各种框架对比之前,我觉得有必要先自己做一个简单的MVVM实现案例比较好,这样就可以看到自己实现的时候有那些不方便的地方.而各种框架又是怎么解决我们这些麻烦的. 案例介绍:用户登录画面,没有 ...
- UWP开发之Mvvmlight实践二:Mvvmlight的核心框架MVVM与MVC、MVP的区别(图文详解)
最近UWP开发在海外很潮流,随着微软收购Xamarin,我们这些C#程序员也可以靠这杆小米枪挑战Android,IOS平台了. 那我们为什么选择MVVM做UWP开发?MVC,MVP,MVVM他们之间到 ...
- UWP开发之Mvvmlight实践一:如何在项目中添加使用Mvvmlight(图文详解)
最近一直在做UWP开发,为了节省成本等等接触到MVVMlight,觉得有必要发点时间研究它的用法与实现原理才行.如果有问题的地方或者有好的建议欢迎提出来. 随着移动开发的热门,Mvvmlight在An ...
- UWP开发之Mvvmlight实践六:MissingMetadataException解决办法(.Net Native下Default.rd.xml配置问题)
最近完成一款UWP应用,在手机端测试发布版(Release)的时候应用莫名奇妙的强行关闭,而同样的应用包在PC端一点问题都没有,而且Debug版在两个平台都没有问题,唯独手机的Release版有问题. ...
- UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理
最近比较忙有一段时间没有更新了,再接再厉继续分享. 案例下载:https://github.com/NewBLife/UWP/tree/master/SuspendSample 先我们看看App在生命 ...
- UWP开发之Template10实践:本地文件与照相机文件操作的MVVM实例(图文付原代码)
前面[UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理]章节已经提到过Template10,为了认识MvvmLight的区别特做了此实例. 原代码地址:ht ...
随机推荐
- 踏上Salesforce的学习之路(三)
一.创建Invoice对象 为了使我们的这个Warehouse app更加接近现实,我们现在为他创建一个Invoice对象. 先点击右上角的Setup,然后在左侧的Quick Find查找框中输入Ob ...
- display:none与visible:hidden的区别
display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就 ...
- CentOS 安装 gcc-c++
由于网络环境的问题,很难在线安装,可以 直接挂载安装盘文件,然后在Pacakage 中进行本地安装
- 有关JVM配置参数含义
1.参数的含义-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M-vmargs 说明后面是VM的参数,所以后面的其实都是JV ...
- sql rowversion
RowsVersion就是timestamp 丢失更新的解决方法 丢失更新概念:当用户同时修改一行数据,他们先读取数据,放在前端进行修改,当修改后,再提交数据,这样最后提交的数据会覆盖先 ...
- 工作总结_sql
今天客户叫导入数据,因为存在特殊字符,快把我给玩死了,,所以请教...总结 sql 数据导入excel 存在特殊字符引起的数据缺失 利用字符方式 : select a.OpenID+', ...
- MVC自定义分页(附表跳转页Loading提示)
之前我发表了一篇MVC无刷新分页的文章,里面用的是MvcPager控件,但是那个受那个控件限制,传值只能用PagedList,各方面都受到了限制,自由度不够高,现在还是做MVC无刷新分页,但是想直接用 ...
- 华为oj 刷题记录之合唱团
华为OJ-合唱队 描述 计算最少出列多少位同学,使得剩下的同学排成合唱队形 说明: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队 ...
- jQuery中设置form表单中action值与js有什么不同。。。。
jQuery中设置form表单中action值与js有什么不同.... HTML代码如下: <form action="" method="post" i ...
- es6入门教程完整版
ECMAScript 6入门 <ECMAScript 6入门>是一本开源的JavaScript语言教程,全面介绍ECMAScript 6新引入的语法特性. 作者:阮一峰 授权:署名-非商用 ...