最近有不少wpf新手问wpf的命令怎么绑定多个控件,很多人为此绞尽脑汁,网上的答案找了也没找到靠谱的,其实用MultiBinding就可以了。从.net 3.0版本开始,就支持MultiBinding
关于MultiBinding的说明:
从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 From: https://www.cnblogs.com/cdaniu/p/16654187.html