第十六章:数据绑定(五)

简介:

字符串格式

上一章中的一些示例程序使用事件处理程序来显示Slider和Stepper视图的当前值。如果您尝试从Slider的Value属性定义一个以Label的Text属性为目标的数据绑定,您会发现它有效,但您无法对其进行太多控制。通常,您需要控制数据绑定中所需的任何类型转换或值转换。这将在本章后面讨论。
但是,字符串格式是特殊的。 Binding类具有StringFormat属性,允许您包含整个.NET格式化字符串。几乎总是,这种绑定的目标是Label的Text属性,但绑定源可以是任何类型。
您提供给StringFormat的.NET格式化字符串必须适合调用String.Format静态方法,这意味着它应包含占位符“{0}”,带有或不带有适合源数据类型的格式规范 - 例如“{0:F3}”显示带有三个小数位的double。
在XAML中,这个占位符有点问题,因为花括号可能会被误认为用于分隔标记扩展的花括号。最简单的解决方案是将整个格式字符串放在单引号中。
ShowViewValues程序包含四个显示Slider,Entry,Stepper和Switch当前值的示例。用于显示条目内容的格式字符串中的十六进制代码是“智能引号”的Unicode ID:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="ShowViewValues.ShowViewValuesPage"
             Padding="10, 0">
    <StackLayout>
        <StackLayout VerticalOptions="CenterAndExpand">
            <Label Text="{Binding Source={x:Reference slider},
                                  Path=Value,
                                  StringFormat='The Slider value is {0:F3}'}" />
            <Slider x:Name="slider" />
        </StackLayout>
 
        <StackLayout VerticalOptions="CenterAndExpand">
            <Label Text="{Binding Source={x:Reference entry},
                                  Path=Text,
                                  StringFormat='The Entry text is &#x201C;{0}&#x201D;'}" />
            <Entry x:Name="entry" />
        </StackLayout>
        <StackLayout VerticalOptions="CenterAndExpand">
            <Label Text="{Binding Source={x:Reference stepper},
                                  Path=Value,
                                  StringFormat='The Stepper value is {0}'}" />
            <Stepper x:Name="stepper" />
        </StackLayout>
        <StackLayout VerticalOptions="CenterAndExpand">
            <Label Text="{Binding Source={x:Reference switch},
                                  Path=IsToggled,
                                  StringFormat='The Switch value is {0}'}" />
            <Switch x:Name="switch" />
        </StackLayout>
    </StackLayout>
</ContentPage>

使用StringFormat时,您需要特别注意逗号,单引号和花括号的位置。
这是结果:
2018_09_25_125653
您可能还记得第5章“处理大小”中的WhatSize程序。该程序在页面上使用SizeChanged事件处理程序以与设备无关的单位显示屏幕的当前宽度和高度。
WhatSizeBindings程序在XAML中完成整个工作。 首先,它将x:Name属性添加到根标记,以便为WhatSizeBindingsPage对象提供页面名称。 三个Label视图在页面中心共享一个水平StackLayout,其中两个绑定到Width和Height属性。 Width和Height属性是get-only,但它们由可绑定属性支持,因此它们在更改时触发PropertyChanged事件:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="WhatSizeBindings.WhatSizeBindingsPage"
             x:Name="page">
    <StackLayout Orientation="Horizontal"
                 Spacing="0"
                 HorizontalOptions="Center"
                 VerticalOptions="Center">
        <StackLayout.Resources>
            <ResourceDictionary>
                <Style TargetType="Label">
                    <Setter Property="FontSize" Value="Large" />
                </Style>
            </ResourceDictionary>
        </StackLayout.Resources>
        <Label Text="{Binding Source={x:Reference page},
                              Path=Width,
                              StringFormat='{0:F0}'}" />
        <!-- Multiplication sign. -->
        <Label Text=" &#x00D7; " />
 
        <Label Text="{Binding Source={x:Reference page},
                               Path=Height,
                               StringFormat='{0:F0}'}" />
    </StackLayout>
</ContentPage>

以下是本书使用的设备的结果:
2018_09_25_125927
在纵向和横向模式之间转动手机时,显示会发生变化。
或者,可以将StackLayout上的BindingContext设置为引用页面对象的x:Reference标记扩展,并且不需要绑定上的Source设置。

目录
相关文章
|
前端开发 JavaScript 数据可视化
最棒的 7 个 Laravel admin 后台管理系统推荐
Laravel 已经凭借自己的易用性及低门槛成为 github 上 stars 第一的 PHP 框架,本文将介绍我精心为大家挑选出来的 Laravel admin 后台管理系统,从抽象程度最低(灵活但代码量大)到抽象程度最高(代码量小但不灵活)来帮助大家选择合适自己的 Laravel admin 后台管理系统。
3807 0
|
Linux PHP Apache
centos7安装php8
centos7安装php8
668 0
|
存储 算法 Java
使用keytool 生成证书
keytool 简介 keytool 是java 用于管理密钥和证书的工具,官方文档其功能包括: 创建并管理密钥 创建并管理证书 作为CA 为证书授权 导入导出证书 主要格式keytool 采用 keystore 文件来存储密钥及证书,其中可包括私钥、信任证书;keystor...
8306 0
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
3358 0
|
人工智能 算法 BI
3.4 预读机制
<div class="bct fc05 fc11 nbw-blog ztag"><div> <p style="TEXT-INDENT: 21pt;"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times new roman'; mso-hansi-font-family: 'Times new roman';">随着处理器
2510 0
|
Java
Java线程方法-休眠(sleep)
Java线程方法-休眠(sleep)
689 0
Java线程方法-休眠(sleep)
|
文字识别 Oracle 关系型数据库
公理设计-由奇怪海战引发的软件设计思考
公理设计理论将设计建立在科学公理、定理和推论的基础上,由麻省理工学院教授 Nam. P. Suh 领导的研究小组于 1978 年提出,适用于各种类别的设计活动。软件设计当然也属于一类工程设计过程,下面我们就来看一下两者的关联。
|
前端开发 .NET
使用ASP.NET SignalR实现一个简单的聊天室
原文:使用ASP.NET SignalR实现一个简单的聊天室  前言   距离我写上一篇博客已经又过了一年半载了,时间过得很快,一眨眼,就把人变得沧桑了许多。青春是短暂的,知识是无限的。要用短暂的青春,去学无穷无尽的知识,及时当勉励,岁月不待人。
2098 0

热门文章

最新文章