MVVM模式的使用,简化了UWP应用的开发,使层次更加分明。在写xaml的时候,有些小技术还是很实用的;比如Converter,字面上理解是转换器,那它到底是转换什么的?接触过的可能知道它起的是类型转换的作用,当你绑定的数据是一堆字母,显示时却想将它变成汉字,一种做法可以在数据绑定前将这些数据转换成需要的文字,另一种做法就是使用Converter。它有两个好处:1,保持原始数据的完整性,不破坏原有数据结构。2,可以复用,别的地方需要直接将这个Converter拿过去就行。

  先展示xaml代码,简单的一个例子,数据源给的是F(Famale)和M(Male),页面展示将它转换成男女显示。需要注意的是Converter是一个.CS文件,在页面的资源中声明后才可以使用。

 <Page
x:Class="ConverterDemo.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:ConverterDemo"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Page.Resources>
<ResourceDictionary>
<local:SexConverter x:Key="SexConverter"/>
</ResourceDictionary>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="姓名"
HorizontalAlignment="Center"
Grid.Row="1"/>
<TextBlock Text="{Binding Person.Name}"
HorizontalAlignment="Center"
Grid.Row="1"
Grid.Column="1"/>
<TextBlock Text="年龄"
HorizontalAlignment="Center"
Grid.Row="2"/>
<TextBlock Text="{Binding Person.Age}"
HorizontalAlignment="Center"
Grid.Row="2"
Grid.Column="1"/>
<TextBlock Text="性别"
HorizontalAlignment="Center"
Grid.Row="3"/>
<TextBlock Text="{Binding Person.Sex,Converter={StaticResource SexConverter}}"
HorizontalAlignment="Center"
Grid.Row="3"
Grid.Column="1"/>
</Grid>
</Page>

Converter的实现需要继承IValueConverter接口,这个接口是系统的,我们要实现的是两个方法Convert和ConvertBack。Convert方法是将数据源绑定的值传给该方法进行转换处理,ConvertBack则是将页面展示的值传给数据源时进行的转换处理,一般情况只使用Convert方法。这两个方法有相同的四个参数,value是数据源绑定传过来的值,targetType不用管它,parameter是转换参数用于根据一个值不能进行明确转换使用的,language就是语言,根据语言不同转换成不同形态可以使用。

 using System;
using Windows.UI.Xaml.Data; namespace ConverterDemo
{
public class SexConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
Sex sex = (Sex)value;
return sex == Sex.F ? "女" : "男";
} public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
}

剩余的代码部分就是根据MVVM随便写一下,添加个Model和ViewModel。

git地址:https://github.com/ZhangHua19920926/ConverterDemo.git

UWP的Converter妙用的更多相关文章

  1. UWP: 妙用自定义 Action 以简化并重用代码

    相信每一位 App 开发者,在开发过程中,都会有一些代码被反复用到,比如:复制文本,打电话,发短信,发邮件,给应用添加评论等等.在项目之间复制这些代码段,实在不是一个好办法,所以大家可能会把这些代码放 ...

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

    [Some information relates to pre-released product which may be substantially modified before it's co ...

  3. UWP控件与DataBind

    在uwp开发中必不可少的一个环节就是各种通用的控件的开发,所以在闲暇时间汇总了一下在uwp开发中控件的几种常用写法,以及属性的几种绑定方式,有可能不全面,请大家多多包涵 :) 1.先从win10新增的 ...

  4. [UWP] 对应用进行A/B测试

    [对A/B测试的看法] 开发者在Dev Center中设置几种应用变体,这几种变体有几个变量的值不一样,比如有变体A和变体B(当然还可以加上变体C,Dev Center最多支持5个变体),A和B的不同 ...

  5. UWP开发之Mvvmlight实践四:{x:bind}和{Binding}区别详解

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

  6. UWP 图片剪切旋转工具

    好久没撸随笔了,明天终于放假休息了..准备去进行信仰充值,看<魔兽>去(话说surface phone 好久出,让我这个做UWP的也充点信仰..) 先上下效果图: 在设计中,遇到一个问题, ...

  7. UWP中的Direct2D

    介绍 DirectX一直是Windows平台中高性能图形的代名词,自Win7开始,微软又推出了Direct2D技术,包装于Direct3D,但专注于2D图形,并且准备取代GDI这样的传统2D图形技术. ...

  8. Win10 UWP开发中的重复性静态UI绘制小技巧 2

    小技巧1 地址:http://www.cnblogs.com/ms-uap/p/4641419.html 介绍 我们在上一篇博文中展示了通过Shape.Stroke族属性实现静态重复性UI绘制,使得U ...

  9. Win10 UWP开发中的重复性静态UI绘制小技巧 1

    介绍 在Windows 10 UWP界面实现的过程中,有时会遇到一些重复性的.静态的界面设计.比如:画许多等距的线条,画一圈时钟型的刻度线,同特别的策略排布元素,等等. 读者可能觉得这些需求十分简单, ...

随机推荐

  1. 转-Tomcat 8 安装和配置、优化

    https://github.com/judasn/Linux-Tutorial/blob/master/Tomcat-Install-And-Settings.md Tomcat 8 安装 Tomc ...

  2. J2EE struts2MVC应用在线书签1

    序:之前花了一天研究了一下filter,虽然是实现了MVC模式开发了 WebBookmark,但是代码过于冗长,集中在filter中使用if语句不易阅读,为了体现两份作业的不同点,我决定学习 Java ...

  3. C++高精度模板

    原文地址:http://blog.csdn.net/wall_f/article/details/8373395 原文只附代码,没有解析,本文增加了一些对代码的解释. 请注意:本模板不涉及实数运算与负 ...

  4. mongodb新人扫盲

    前言 数据库基本命令 集合(表)命令 增加数据 删除数据 更新数据 使用update()更新 使用save()命令实现upsert 自动更新信息 查询数据 mongoose的使用 前言 mongodb ...

  5. Android分享功能实现

    通过系统分享组件实现分享功能 Intent.createChooser() 方法用来弹出系统分享列表. createChooser(Intent target, CharSequence title, ...

  6. 如何自学成为一个WEB前端

    WEB前端是做什么的? 那些什么高大上的介绍作者就略过了,简单来说就是做网页的,我们上网浏览的网站界面就是WEB前端工程师做的. 在互联网迅速发展的近几年,你上网冲浪的时候是不是感觉WEB网站越来越漂 ...

  7. 13、Java菜单条、菜单、菜单项

    13.Java菜单条.菜单.菜单项 一般用Java做界面时,都得牵涉到菜单条.菜单.菜单项的设计.菜单项放在菜单里,菜单放在菜单条里,且其字体均可设置. 13.1.菜单条(Menubar) Frame ...

  8. 开涛spring3(6.1) - AOP 之 6.1 AOP基础

    6.1.1  AOP是什么 考虑这样一个问题:需要对系统中的某些业务做日志记录,比如支付系统中的支付业务需要记录支付相关日志,对于支付系统可能相当复杂,比如可能有自己的支付系统,也可能引入第三方支付平 ...

  9. mongodb 创建LBS位置索引

    <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver< ...

  10. 最近用django做了个在线数据分析小网站

    用最近做的理赔申请人测试数据集做了个在线分析小网站. 数据结构,算法等设置都保存在json文件里.将来对这个小破站扩充算法,只修改一下json文件就行. 当然,结果分析还是要加代码的.页面代码不贴了, ...