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

  • 相关阅读:
    cf605 div3
    how to find Longest Increasing Subsequence Size
    luogu1641 [SDOI2010]生成字符串
    luogu1441 砝码称重
    luogu4218 [JSOI2008] 最小生成树计数
    luogu1514 引水入城
    luogu1312 Mayan游戏 剪枝
    luogu1081 开车旅行 树上倍增
    luogu1052 过河
    luogu1026 统计单词个数
  • 原文地址:https://www.cnblogs.com/ssvip/p/10181167.html
Copyright © 2011-2022 走看看