【WPF】wpf用MultiBinding解决Converter需要动态传参的问题,以Button为例
原文:【WPF】wpf用MultiBinding解决Converter需要动态传参的问题,以Button为例
用Binding并通过Converter转换的时候,可能偶尔会遇到传参的问题,一般通过设置xaml中的BindingParameter属性来给Converter传递参数。
但是这个BindingParameter只支持已经定义好的资源类型(Resource),不支持int,Object等类型,在BindingParameter中也无法再次通过Binding的方法动态赋值。所以,折腾来折腾去还不如用MultiBinding得了。
1.XAML中的使用。
<Button Margin="20,0" Style="{StaticResource btnRecomendStyle}" >
<Button.Content>
<MultiBinding Converter="{StaticResource bool_PercentToStringConverter}">
<Binding Path="IsTest"></Binding>
<Binding Path="TestPercent"></Binding>
</MultiBinding>
</Button.Content>
<Button.Command>
<MultiBinding Converter="{StaticResource bool_PercentToCommandConverter}">
<Binding Path="IsTest"></Binding>
<Binding Path="TestPercent"></Binding>
</MultiBinding>
</Button.Command>
</Button>
Button的Content和Command都进行了两个绑定,这两个绑定将作为下面Converter类Object[]中的两个参数。
2.定义MultiConverter类,bool_PercentToStringConverter:
class Bool_PercentToStringConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
bool b;
int Percent;
Boolean.TryParse(values[0].ToString(), out b);
Int32.TryParse(values[1].ToString(), out Percent);
if (b)
{
if (Percent < 100)
{
return Application.Current.FindResource("IDS_CANCEL");
}
else
{
return Application.Current.FindResource("IDS_DONE");
}
}
else
{
return Application.Current.FindResource("IDS_TEST");
}
} public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
} }
这里不再实现IValueConverter接口,而是实现IMultiValueConverter。Object[] values里保存的就是传入的两个Binding。
【WPF】wpf用MultiBinding解决Converter需要动态传参的问题,以Button为例的更多相关文章
- Python基础--动态传参
形参的顺序: 位置 *arg 默认值 **args ps:可以随便搭配,但是*和**以及默认值的位置顺序不能变 *,** 形参:聚合 位置参数* >>元祖 关键字** > ...
- 超全table功能Datatables使用的填坑之旅--2:post 动态传参: 解决: ajax 传参无值问题.
官网解释与方法:1 当向服务器发出一个ajax请求,Datatables将会把服务器请求到的数据构造成一个数据对象. 2 实际上他是参考jQuery的ajax.data属性来的,他能添加额外的参数传给 ...
- 在Java中动态传参调用Python脚本
最近,又接触到一个奇葩的接口,基于老板不断催促赶时间的情况下,在重写java接口和复用已有的python脚本的两条路中选择了后者,但是其实后者并没有好很多,因为我是一个对python的认识仅限于其名称 ...
- python函数的动态传参.作用域与命名空间
一.动态传参1.*表示动态传参. 可以接受所有的位置参数传参的时候自动的把实参打包成元组 交给形参 def chi(*food): print(food) chi() # 动态传参可以不传参数 chi ...
- Android使用Gradle命令动态传参完成打包,不需要修改代码
不得不说,Gradle很强大,有人会问Gradle是什么?这里也不细讲,在我认为他就是一个构建神器.Gradle 提供了: 一个像 Ant 一样的非常灵活的通用构建工具 一种可切换的, 像 Maven ...
- js函数动态传参
js函数体内可以通过arguments对象来接收传递进来的参数,利用这一对象属性可以动态传参. function box() { return arguments[0]+' | '+arguments ...
- uploadify的用法与动态传参 提供demo下载
---恢复内容开始--- 官网:http://www.uploadify.com/ 一款不错的上传插件.官方文档http://www.uploadify.com/documentation/ 用法 ...
- Postman 串行传参和动态传参详解
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 用Postman做接口测试的时候,要把多条用例一起执行,就需要把用例连接起来,一次性执行 目录 串行传参 动态传参 使用 ...
- python之路--动态传参,作用域,函数嵌套
一 . 动态传参(重点) * , ** * 与 ** * 在形参位置. * 表示不定参数, 接收的是位置参数 接收到的位置参数的动态传参: 都是元组 def eat(*food): # 在形参这里 ...
随机推荐
- [Webpack] Access Webpack Dev Server from Mobile Safari on an iPhone
Testing your sites on mobile devices is a critical part of the development process. Webpack dev serv ...
- android Navigator的高度计算和推断是否显示
进入互联网行业几天了, 从手机行业转到互联网行业也在慢慢的适应: IDE工具的使用(之前一直在Ubuntu 命令行进行开发). 版本号管理工具,代码架构等等这些都须要又一次适应. 好在本人另一些底子, ...
- Android开发和測试实践 - 接入友盟统计
这两年一直在做无线的測试,兴许还会继续去做无线的測试,可是之前由于时间的原因一直都没有非常细致的了解到代码层面. 最近抽出时间自己做了些app的开发,决定假设想把移动的測试做好做深入.有一定的app开 ...
- [Ramda] Rewrite if..else with Ramda ifElse
From: const onSeachClick = (searchTerm) => { if(searchTerm !== '') { searchForMovies(searchTerm) ...
- [Angular] @ViewChild and template #refs to get Element Ref
We can use @ViewChild with component: @ViewChild(AuthMessageComponent) message: AuthMessageComponent ...
- js进阶 10-1 JQuery是什么
js进阶 10-1 JQuery是什么 一.总结 一句话总结: 1.两种引用jquery的方法? 可以在线jquery和本地jquery两种 2.jquery主要好处? 浏览器兼容问题 二.js进阶 ...
- 开源库Fab-Transformation简单使用解析
转载请注明出处王亟亟的大牛之路 相似于IPhone的悬浮按钮的操作,仅仅只是是固定的,当然经过自己的改动也能够动.这边仅仅是给伸手党一个福祉,外加加上一些自己的理解.让大家能够拿来就用.看了就懂,废话 ...
- push的时候隐藏底部的tabbar
push的时候隐藏底部的tabbar #import "mainNavigationControllers.h" @interface mainNavigationControll ...
- node服务器如何部署https证书
var http = require('http'); var https = require('https'); var path = require('path'); var fs = requi ...
- 关于js的window.open()
window.open是javascript函数,该函数的作用是打开一个新窗口或这改变原来的窗口,不过一般用来的是打开新窗口,因为修改原来的网页地址,可以有另一个函数,那就是window.locati ...