当前位置: 首页 > news >正文

WPP多重值绑定

以下使用的参数:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace XH.BindingLesson.OtherBindings
{public class Data{//public int Value { get; set; } = 123;private int _value = 123;public int Value{get { return _value; }set { _value = value; }}//public string Value2 { get; set; } = "Hello";private string _value2 = "Hello";public string Value2{get{Thread.Sleep(2000);return _value2;}set{_value2 = value;}}private double _progressValue = 0.25;public double ProgressValue{get { return _progressValue; }set { _progressValue = value; }}private int _value1 = 100;public int Value1{get{Thread.Sleep(3000);return _value1;}set{_value1 = value;}}private int _value3 = 300;public int Value3{get{Thread.Sleep(1000);return _value3;}set{_value3 = value;}}}
}

MultiBinding 多重绑定基本使用

需求:在一次绑定中,如果一个控件需要给很多属性进行绑定,就可以使用多重数据绑定

 <TextBlock><TextBlock.Text><!--多重绑定 可以根据下表进行顺序显示--><MultiBinding StringFormat="{}{1}{0}"><Binding Path="Value" /><Binding Path="Value2" /></MultiBinding></TextBlock.Text></TextBlock>

多重绑定 可以根据StringFormat来改变显示顺序

显示结果为:

MultiBinding Converter 多重值转换器

需求:如果转换的时候不仅仅是显示,还需要计算,则需要使用Converter

C#代码:转换器代码:

需要继承:IMultiValueConverter

using System.Globalization;
using System.Windows.Data;namespace XH.BindingLesson.OtherBindings
{public class CombinValueConverter : IMultiValueConverter{// 源到目标public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture){string v = string.Empty;foreach (var item in values){v += item+",";}return v.TrimEnd(',');}// 目标到源public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture){string[] str = value.ToString().Split(',');object[] result = new object[str.Length];result[0] = int.Parse(str[0].ToString());result[1] = str[1].ToString();return result;}}
}

XAML使用代码:

<Window.Resources><local:CombinValueConverter x:Key="cvc" />
</Window.Resources>
…………………………
<TextBox><TextBox.Text><!--绑定显示转换器--><MultiBinding Converter="{StaticResource cvc}"><Binding Path="Value" /><Binding Path="Value2" /></MultiBinding></TextBox.Text>
</TextBox>

显示结果一样

使用案例:

需求:我需要在一个border1中设置一个border2,但是这个border2的宽度是border1的百分比(参数),请问怎么写?需要多重数据绑定:

XAML使用代码:

<Window.Resources><local:WidthValueConverter x:Key="wvc" />
</Window.Resources>
……………………………………
<!--多重绑定实现子控件长度是父控件的百分比--><Border Height="20" Background="Gray" Margin="30 10" Name="bor" ><Border Background="Orange" HorizontalAlignment="Left"><Border.Width><MultiBinding Converter="{StaticResource wvc}"><Binding Path="ProgressValue" /><Binding ElementName="bor" Path="ActualWidth" /></MultiBinding></Border.Width></Border></Border>

C#转换器代码:

using System.Globalization;
using System.Windows.Data;namespace XH.BindingLesson.OtherBindings
{public class WidthValueConverter : IMultiValueConverter{public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture){return double.Parse(values[0].ToString()) * double.Parse(values[1].ToString());}public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture){throw new NotImplementedException();}}
}

效果如下: ProgressValue == 0.25

PriorityBinding 优先级绑定 了解

使用场景不多,会用就行

IsAsync 需要打开异步属性

<TextBlock.Text><PriorityBinding><Binding Path="Value2" IsAsync="True" /><Binding Path="Value3" IsAsync="True" /><Binding Path="Value1" IsAsync="True" /></PriorityBinding>
</TextBlock.Text>

注意:需要在C#Get属性的地方添加延时

ClearBinding 绑定关系清除 了解

C#代码:

// 删除所有绑定关系
BindingOperations.ClearAllBindings(this.tb);
// 删除特定的绑定关系
BindingOperations.ClearBinding(this.tb,TextBox.TextProperty);

注意:

TextBlock Text 默认是OneWay绑定 修改之后,绑定关系不在,除非修改绑定关系

TextBox Text 默认是TwoWay绑定 修改之后,绑定关系还在

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于JAVA的外来人口管理系统设计与实现,源码、部署+讲解
  • java消息队列ActiveMQ
  • 【Python零基础学习】变量和简单数据类型
  • 【Python】Jupyter Notebook的安装及简单使用
  • 【流媒体协议】RTMP协议概述
  • c++精品小游戏(无错畅玩版)
  • 一文打通pytorch中几个常见的张量操作
  • 第43集《大佛顶首楞严经》
  • 贪吃蛇游戏的实现:C++ 控制台版
  • PyTorch:从零实现一个双向循环神经网络
  • MySQL-MHA高可用配置及故障切换
  • 凸分析与凸优化精解【1】
  • Oracle-OracleConnection
  • JavaScript高阶笔记总结(Xmind格式):第三天
  • 如何在阿里云环境中通过 Jenkins 实现 .NET Core 应用的 Docker 化部署:从 GitLab 拉取代码到自动化 CI/CD 流程的完整指南
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • CSS中外联样式表代表的含义
  • Git 使用集
  • golang 发送GET和POST示例
  • JAVA 学习IO流
  • JavaScript DOM 10 - 滚动
  • SOFAMosn配置模型
  • vuex 笔记整理
  • 二维平面内的碰撞检测【一】
  • 汉诺塔算法
  • 基于Android乐音识别(2)
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何优雅地使用 Sublime Text
  • 试着探索高并发下的系统架构面貌
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 用 Swift 编写面向协议的视图
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # include “ “ 和 # include < >两者的区别
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (13)DroneCAN 适配器节点(一)
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (JS基础)String 类型
  • (solr系列:一)使用tomcat部署solr服务
  • (二)JAVA使用POI操作excel
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (接口封装)
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十三)Flink SQL
  • (四)模仿学习-完成后台管理页面查询
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)