wpf怎麼繫結多個值,多個控制元件
阿新 • • 發佈:2018-12-26
最近有不少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裡是很簡單的,別想得太難。如果想繫結三個值、四個值,甚至更多值,往多值轉換里加即可,此多值繫結的耦合性是比較低的。