最近有不少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里是很簡單的,別想得太難。如果想綁定三個值、四個值,甚至更多值,往多值轉換里加即可,此多值綁定的耦合性是比較低的。