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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM