zoukankan      html  css  js  c++  java
  • wpf怎么绑定多个值,多个控件

    最近有不少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里是很简单的,别想得太难。如果想绑定三个值、四个值,甚至更多值,往多值转换里加即可,此多值绑定的耦合性是比较低的。

  • 相关阅读:
    图像维纳滤波实现(2)
    C++之路 变量和基本类型(2)
    [C# 线程处理系列]专题四:线程同步
    [转]排列组合
    Bessie Come Home(!)先存着
    The ONE v1.4.1 Readme
    myeclipse字体修改
    vm 三种上网方式
    Cow Tours
    C++中, 构造函数和析构函数能不能被显示调用?
  • 原文地址:https://www.cnblogs.com/ssvip/p/10181167.html
Copyright © 2011-2022 走看看