ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【WPF】wpf怎么绑定多个值,多个控件 绑定多个CommandParameter 命令参数

2022-09-04 06:00:13  阅读:279  来源: 互联网

标签:控件 object 转换 多个 绑定 wpf public


最近有不少wpf新手问wpf的命令怎么绑定多个控件,很多人为此绞尽脑汁,网上的答案找了也没找到靠谱的,其实用MultiBinding就可以了。从.net 3.0版本开始,就支持MultiBinding

关于MultiBinding的说明:

https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.data.multibinding?redirectedfrom=MSDN&view=netframework-4.7.2

从msdn说明中我们得知,它需要一个值转换Converter来实现多个参数绑定的逻辑,我们来实现以下,xaml代码如下:

<Button  Text="绑定多值到命令"  Command="{Binding ImplementationCommand}"   >
                        <Button.CommandParameter>
                            <MultiBinding Converter="{StaticResource MultiBindingConverter}">
                                <Binding ElementName="MyTreeView"/>
                                <Binding ElementName="MyScrollViewer"/>
                            </MultiBinding>
                        </Button.CommandParameter>
                    </Button>

需要注意的是,这里是多值转换,所以值转换不是继承接口IValueConverter,而是继承接口IMultiValueConverter,和值转换接口IValueConverter一样,它需要实现Convert和ConvertBack方法。

上面我们声明的值转换MultiBindingConverter的实现:

  /// <summary>
    /// 绑定多参数的值转换器
    /// </summary>
    public class MultiBindingConverter:IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return values.Clone();
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

这样我们就可以调用了,在命令的实现方法中我们可以这样得到绑定的值:

 private void ImplementationInvoke(object obj)
{
    //从绑定值得到控件数组
    var controlArray = (object[])obj;
     TreeView tv =(TreeView)controlArray[0];
      ScrollViewer viewer = (ScrollViewer)controlArray[1];   
}

所以多值绑定在wpf里是很简单的,别想得太难。如果想绑定三个值、四个值,甚至更多值,往多值转换里加即可,此多值绑定的耦合性是比较低的。

转载于:https://www.cnblogs.com/ssvip/p/10181167.html

标签:控件,object,转换,多个,绑定,wpf,public
来源: https://www.cnblogs.com/cdaniu/p/16654187.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有