Binding常用辅助属性、多重绑定、优先级绑定

news2024/11/16 21:42:50

Binding常用辅助属性、多重绑定、优先级绑定

Binding常用辅助属性

  • StringFormat
<Window.Resources>
    <sys:Int32 x:Key="myInt">200</sys:Int32>
    <sys:Single x:Key="mySingle">100.123456</sys:Single>
</Window.Resources>
<StackPanel>
    <!--货币-->
    <TextBlock Text="{Binding Source={StaticResource myInt}, StringFormat={}{0:C}}"/>
    <!--中文货币符号-->
    <TextBlock Text="{Binding Source={StaticResource myInt}, StringFormat={}{0:C} ,ConverterCulture=zh-CN}"/>
    <!--文字拼接-->
    <TextBlock Text="{Binding Source={StaticResource myInt}, StringFormat=单价:{0:C} ,ConverterCulture=zh-CN}"/>
    <!--数字-->
    <TextBlock Text="{Binding Source={StaticResource mySingle}, StringFormat={}{0:F2}}"/>
    <!--时间-->
    <TextBlock Text="{Binding Path=DateTimeDateTime,  RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}, StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}"/>
</StackPanel>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d7cmQN4Z-1673756706731)(C:\Users\54302\AppData\Roaming\Typora\typora-user-images\image-20230115111305849.png)]

  • FallbackValue :bingding无法返回值时所显示的默认值
  • TargetNullValue:当绑定源为null时,绑定目标所显示的值
  • Delay:从绑定目标修改到绑定源更新的延迟时间

多重绑定

当需要的信息不止一个数据源时,可以使用MultiBinding,MultiBinding具有一个Bindings的属性,类型是Collection,处在这个集合中的Binding对象可以拥有自己的数据校验和转换机制,他们汇总起来的数据将传递到Target上。

public class Data
{
    private int _value1 =2;

    public int Value1
    {
        get { return _value1; }
        set { _value1 = value; }
    }

    private int _value2 =2;

    public int Value2
    {
        get { return _value2; }
        set { _value2 = value; }
    }

    // 有些情况:数据需要进行计算得到一个新的结果 
    private int _value3;

    public int Value3
    {
        get { return Value1 + Value2; }
        set { _value3 = value; }
    }

}

在XAML中使用多重绑定

<!--MultiBinding-->
<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}-{1}-{2}">
            <Binding Path="Value1"/>
            <Binding Path="Value2"/>
            <Binding Path="Value3" FallbackValue="异常"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

另一种实现方式

<!--两一种实现方式-->
<TextBlock>
    <Run Text="{Binding Value1}"/><Run Text="{Binding Value2 ,StringFormat=-{0}}"/><Run Text="{Binding Value3 ,StringFormat=-{0}}"/>
</TextBlock>

使用IMultiValueConverter

// 多重绑定值转换器
public class MyValueConverter : IMultiValueConverter
{
    /// <summary>
    /// 从源到目标
    /// </summary>
    /// <param name="values">数组:绑定的所有值</param>
    /// <param name="targetType">目标控件的目标属性</param>
    /// <param name="parameter"></param>
    /// <param name="culture"></param>
    /// <returns></returns>
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return values[0].ToString() +"-"+ values[1].ToString() +"-IMultiValueConverter";
    }

    /// <summary>
    /// 从目标到源
    /// </summary>
    /// <param name="value">单值</param>
    /// <param name="targetTypes">类型数组</param>
    /// <param name="parameter"></param>
    /// <param name="culture"></param>
    /// <returns>返回数组</returns>
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        return null;
    }
}
<TextBlock>
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource myConverter}">
            <Binding Path="Value1"/>
            <Binding Path="Value2"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

多重绑定转换器的详细说明参见5-3Binding对数据的转换和校验

三种方式的展示效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-moKl2kle-1673756706733)(Binding常用辅助属性、多重绑定、优先级绑定.assets/image-20230115120453590.png)]

优先级绑定

绑定是确定优先顺序

public class Data
{
    private int _value1 = 1;

    public int Value1
    {
        get
        {
            Thread.Sleep(10000);// 耗时操作
            return _value1;
        }
        set { _value1 = value; }
    }

    private int _value2 = 2;

    public int Value2
    {
        get
        {
            Thread.Sleep(8000);// 耗时操作
            return _value2;
        }
        set { _value2 = value; }
    }

    private int _value3 = 3;

    public int Value3
    {
        get
        {
            Thread.Sleep(5000);// 耗时操作
            return _value3;
        }
        set { _value3 = value; }
    }
}

XAML

<TextBox>
    <PriorityBinding FallbackValue="正在获取数据...">
        <!--并不是全部显示 ,而是以优先级顺序来显示-->
        <Binding Path="Value1" IsAsync="True" UpdateSourceTrigger="PropertyChanged"/>
        <Binding Path="Value2" IsAsync="True" UpdateSourceTrigger="PropertyChanged"/>
        <Binding Path="Value3" IsAsync="True" UpdateSourceTrigger="PropertyChanged"/>
    </PriorityBinding>
</TextBox>

该案例中,优先级从高到低是Value1>Value2>Value3,虽然Value3会先拿到值,但是优先级高的属性有值时仍然会显示优先级较高的属性内容。如果优先级较高的属性因为异常等原因不能显示时,会显示优先级较低的属性。
在这里插入图片描述

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

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

相关文章

Linux 中断控制器(五):中断号映射

中断号分为硬件中断号(HW ID)和软件中断号(IRQ number)。 这里有两个中断控制器,处理完毕进入 CPU。外设和中断控制器连接在一起,外设给中断控制器的是硬件中断号,如果中断控制器有级联,那么硬件中断号在不同的中断控制器中可能会重复。但是到了 CPU 以后,我们需要对不…

C语言:分支语句和循环语句

往期文章 C语言&#xff1a;初识C语言 目录往期文章前言1. 什么是语句2. 分支语句&#xff08;选择结构&#xff09;2.1 if语句2.2 switch语句3. 循环语句3.1 while循环3.2 for循环3.3 do while 循环3.4 goto语句后记前言 趁热打铁啊。写完该系列第一篇博客我就来劲了&#x…

TicTacToe: 基于时序差分TD(0)算法的agent实现以及完整python实现框架

目录 1. 前言 2. TD(0) 3. 实现要点解读 3.1 Class Env 3.2 Class State 3.3 Class Agent 3.3.1 class TD0Agent(Agent) 3.3.2 class MinimaxAgent 3.3.3 class RandomAgent(Agent) 3.3.4 class HumanPlayer(Agent) 3.4 棋盘和玩家的表示 4. Utility Function 4.1…

Redis02之使用java代码操作Redis

目录 1、可视化管理工具redis-desktop-manager安装与配置 ​编辑 2、Java访问redis 注1&#xff1a;不需要记得API的方法&#xff0c;只需要查redis命令 3、web3.0设置 1、可视化管理工具redis-desktop-manager安装与配置 1.1 双击redis-desktop-manager-0.8.8.384.exe即可…

【LeetCode】2293. 极大极小游戏

2293. 极大极小游戏 题目描述 给你一个下标从 0 开始的整数数组 nums &#xff0c;其长度是 2 的幂。 对 nums 执行下述算法&#xff1a; 设 n 等于 nums 的长度&#xff0c;如果 n 1 &#xff0c;终止 算法过程。否则&#xff0c;创建 一个新的整数数组 newNums &#xf…

自动驾驶轨迹生成-贝塞尔(Bézier)曲线

引言 最近刚看完贝塞尔曲线&#xff0c;工作就遇到了相应的需求&#xff0c;所以写一下过程。主要讲的是自动驾驶中&#xff0c;车换道时用到贝塞尔曲线&#xff0c;当然其他的很多领域也会有&#xff0c;例如图形学等。 在车遇到障碍物或者是前车速度较慢的时候&#xff0c;…

【编译原理核心知识点总结】第三章、正则文法、NFA、DFA

阅读规范&#xff1a; 本文以重点为主&#xff0c;零碎知识点/相对不够重要的为辅助阅读内容&#xff0c;以脚注形式给出&#xff0c;点击脚注即可快速跳转。助解题目通常是为了帮助理解给出的题目&#xff0c;考试不考&#xff0c;若已理解可直接跳过。文中提到的课本是陈火旺…

SpringBoot 并发编程学习历程(绝对的干货)

如果一个项目总用单线程来跑&#xff0c;难免会遇到一些性能问题&#xff0c;所以再开发中&#xff0c;我们应该尽量适量的使用多线程&#xff08;在保证线程安全的情况下&#xff09;。 本教程大概目录&#xff1a; 1.模拟单线程情节 2.用Callable实现 并发编程 3.用DeferedR…

高并发系统设计 --基于bitmap的用户签到

业务需求分析 一般像微博&#xff0c;各种社交软件&#xff0c;游戏等APP&#xff0c;都会有一个签到功能&#xff0c;连续签到多少天&#xff0c;送什么东西&#xff0c;比如&#xff1a; 签到1天送10积分&#xff0c;连续签到2天送20积分&#xff0c;3天送30积分&#xff0…

Qt之QDrag的使用(含源码+注释)

一、效果示例图 提示&#xff1a;主控件&#xff08;CDragTest界面&#xff0c;UI中中包含CWidget界面&#xff09;&#xff1b;子控件&#xff08;CWidget界面&#xff0c;在CDragTest界面添加&#xff09; 提示&#xff1a;源码中拖拽数据设置的文本不同&#xff0c;是博主准…

【ONE·C || 分支循环】

总言 C语言&#xff1a;分支循环。 文章目录总言1、分支语句1.1、if语句1.1.1、基本格式1.1.2、逻辑真假与悬空else1.1.3、练习1.2、switch语句1.2.1、基本格式&#xff1a;break、case、default1.2.2、练习&#xff1a;switch语句嵌套2、循环语句2.1、while循环2.1.1、基本格式…

uniapp实现界面可任意拖动小图标

uniapp实现界面可任意拖动小图标一、问题&#xff1a;二、解决步骤2.1 根据uni-app官方提供的案例&#xff0c;创建组件2.2 在需要的界面引入组件使用额外注意一、问题&#xff1a; 例如购物车小图标可任意拖动 二、解决步骤 2.1 根据uni-app官方提供的案例&#xff0c;创建…

Kubernetes教程(二)---集群网络之 Flannel 核心原理

来自&#xff1a;指月 https://www.lixueduan.com 原文&#xff1a;https://www.lixueduan.com/posts/kubernetes/02-cluster-network/ 本文主要记录了 Kubernetes 集群网络方案之 Flannel 核心原理详解&#xff0c;包括其隧道方案中的两种&#xff1a;UDP 实现和 VXLAN 实现…

Mysql之增删改查

这里的增删改查主要是对应表中的数据&#xff0c;不像前一篇那个列类型&#xff0c;耳机具体的哪一条数据 Insert 其实我们前面都用过好多次了 比如下面那个 可以 关于那个表名后面加不加&#xff08;列类型&#xff09;&#xff0c;下面有解释 INSERT INTO shanpin VALUES…

关于yolov8一些训练的情况

U神出品了最新的yolov8&#xff0c;从公开的参数量来看确实很优秀&#xff01;&#xff01;&#xff01;&#xff01;比如下图得一些指标&#xff1a; 可以看到s模型640得map已经达到了44.9&#xff0c;v8n得map也已经达到了37.3&#xff0c;很强了&#xff0c;但是实际上是怎么…

Python爬虫之Scrapy框架系列(3)——项目实战【某瓣top250电影信息获取】

目录&#xff1a;1. 某瓣电影top250首页电影信息的获取&#xff01;1.创建项目&#xff1a;2.创建爬虫文件&#xff1a;3.运行爬虫文件&#xff1a;4.设置请求头&#xff1a;5.获取到电影名字&#xff1a;5.1 使用shell交互式平台&#xff1a;5.1.1 首先&#xff1a;打开我们的…

239页10万字“联、管、用”三位一体雪亮工程整体建设方案

【版权声明】本资料来源网络&#xff0c;知识分享&#xff0c;仅供个人学习&#xff0c;请勿商用。【侵删致歉】如有侵权请联系小编&#xff0c;将在收到信息后第一时间删除&#xff01;完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 目录 1、 项目概述 1.1 项目背…

用R语言绘制泰勒级数的逼近过程

文章目录泰勒级数是如何被发现的用图像理解Taylor级数的逼近过程前情提要 R语言微积分极限π,e,γ\pi, e, \gammaπ,e,γ洛必达法则连续性和导数数值导数差商与牛顿插值方向导数 泰勒级数是如何被发现的 如果我是泰勒&#xff0c;我会把思考的起点建立在这样的一个等式上 f(n…

Windows10电脑重装系统详细步骤(纯净版)

目录 前言&#xff1a; 一、准备工作 二、下载pe工具 三、下载系统镜像ISO文件 获取方式一 获取方式二 获取方式三 四、进入pe系统 1.检查以上的准备工作是否完成 2.然后拔出来u盘插入要重装的电脑上面 3.然后按电源键开机&#xff08;不能点击重启&#xff01;&…

【Git 从入门到精通】使用Git将本地代码推送到Github

文章目录一、创建远程库二、Git操作远程库1.推送代码2.克隆代码3.拉取代码4.Pull request5.常用命令总结一、创建远程库 打开github.com&#xff0c;点击右上角加号&#xff0c;点击第一个选项。 填写库的基本信息&#xff0c;如果你想代码开源就选择public&#xff0c;否则就…