开发者社区> 杰克.陈> 正文

【WPF】wpf用MultiBinding解决Converter需要动态传参的问题,以Button为例

简介: 原文:【WPF】wpf用MultiBinding解决Converter需要动态传参的问题,以Button为例       用Binding并通过Converter转换的时候,可能偶尔会遇到传参的问题,一般通过设置xaml中的BindingParameter属性来给Converter传递参数。
+关注继续查看
原文:【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。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何重置Joomla并解决文件或数据库问题
如果您在Joomla网站上遇到问题,那么重新安装其核心文件和数据库可能是最好的解决方案。
861 0
解决UnicodeEncodeError: &#39;ascii&#39; codec can&#39;t encode characters in position 问题(转)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 8-11: ordinal not in range(128) 解决UnicodeEncodeError: 'ascii' codec can't encode characters in position 转自:http://cooler1217.
1166 0
ASP.NET MVC4 音乐商店,Entity Framework 4.1 表名被自动转换成复数问题解决
 做ASP.NET MVC3 Music Store示例时,   EntityFramework4.1 下表名被自动转换成复数问题: 解决方案:    using System; using System.
802 0
【Filter 页面重定向循环】写一个过滤器造成的页面重定向循环的问题
今天做一个过滤器,碰上页面重定向循环的情况: 浏览器的访问路径是:http://192.168.16.104:8080/biologyInfo/login/login/login/login/login/login/login/login/login/login/login/login/login...
1088 0
has been modified since the precompiled header问题的几种解决方案
有时候不小心就报了这个错误,在以下步骤中,只有没解决问题的情况下,才继续往下操作: Clean工程 按住option键,再次Clean(Clean Build Folder.
744 0
+关注
杰克.陈
一个安静的程序猿~
10425
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载