原文:【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为例的更多相关文章

  1. Python基础--动态传参

    形参的顺序: 位置 *arg     默认值  **args  ps:可以随便搭配,但是*和**以及默认值的位置顺序不能变 *,** 形参:聚合 位置参数* >>元祖 关键字** > ...

  2. 超全table功能Datatables使用的填坑之旅--2:post 动态传参: 解决: ajax 传参无值问题.

    官网解释与方法:1 当向服务器发出一个ajax请求,Datatables将会把服务器请求到的数据构造成一个数据对象. 2 实际上他是参考jQuery的ajax.data属性来的,他能添加额外的参数传给 ...

  3. 在Java中动态传参调用Python脚本

    最近,又接触到一个奇葩的接口,基于老板不断催促赶时间的情况下,在重写java接口和复用已有的python脚本的两条路中选择了后者,但是其实后者并没有好很多,因为我是一个对python的认识仅限于其名称 ...

  4. python函数的动态传参.作用域与命名空间

    一.动态传参1.*表示动态传参. 可以接受所有的位置参数传参的时候自动的把实参打包成元组 交给形参 def chi(*food): print(food) chi() # 动态传参可以不传参数 chi ...

  5. Android使用Gradle命令动态传参完成打包,不需要修改代码

    不得不说,Gradle很强大,有人会问Gradle是什么?这里也不细讲,在我认为他就是一个构建神器.Gradle 提供了: 一个像 Ant 一样的非常灵活的通用构建工具 一种可切换的, 像 Maven ...

  6. js函数动态传参

    js函数体内可以通过arguments对象来接收传递进来的参数,利用这一对象属性可以动态传参. function box() { return arguments[0]+' | '+arguments ...

  7. uploadify的用法与动态传参 提供demo下载

    ---恢复内容开始--- 官网:http://www.uploadify.com/   一款不错的上传插件.官方文档http://www.uploadify.com/documentation/ 用法 ...

  8. Postman 串行传参和动态传参详解

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 用Postman做接口测试的时候,要把多条用例一起执行,就需要把用例连接起来,一次性执行 目录 串行传参 动态传参 使用 ...

  9. python之路--动态传参,作用域,函数嵌套

    一 . 动态传参(重点)  * ,  ** * 与 ** * 在形参位置. * 表示不定参数, 接收的是位置参数 接收到的位置参数的动态传参: 都是元组 def eat(*food): # 在形参这里 ...

随机推荐

  1. jsvc 启动java 在linux下的实现原理

    http://blog.csdn.net/raintungli/article/details/8265009 JSVC:http://commons.apache.org/proper/common ...

  2. [TypeScript] Simplify asynchronous callback functions using async/await

    Learn how to write a promise based delay function and then use it in async await to see how much it ...

  3. 【codeforces 755A】PolandBall and Hypothesis

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  4. 基于 OAuth 安全协议的 Java 应用编程

    OAuth 简介 OAuth 是由 Blaine Cook.Chris Messina.Larry Halff 及 David Recordon 共同发起的,目的在于为 API 访问授权提供一个安全. ...

  5. erlang抽象码与basho的protobuf

    erlang抽象码与basho的protobuf(一)使用 erlang抽象码与basho的protobuf(二)代码生成原理之词法与语法分析 erlang抽象码与basho的protobuf(三)代 ...

  6. radio实现第一次点击选中第二次点击取消

    Jquery代码如下: $("#add_form .radio input").bind("click",function(){ var $radio = $( ...

  7. Crystal Report - 水晶报表导出文件的格式设置

    水晶报表中自带的导出和打印功能用起来确实很方便,只不过有时候需要导出的文件并不需要那么多种类型,在网上找到一些朋友的代码总结了一下,可以通过代码实现自定义导出文件类型 首先需要定义一个枚举: publ ...

  8. 经典卷积神经网络的学习(三)—— Inception Net

    Google Inception Net 首次出现在 ILSVRC 2014 的比赛中(和 VGGNet 同年),就以较大优势拔得头筹.那届比赛中的 Inception Net 一般被称为 Incep ...

  9. 用js获取实时的获取当前的年月日,时分秒,以及星期

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...

  10. 机器审核图片学习(1)pornDetector

    a) https://github.com/bakwc/PornDetector 封装了两个库,opencv与scikit-learn 另外一种法师封装了opencv与tensorflow