wpf icommand




使用WPF綁定傳遞兩個命令參數 (2)

在Converter中使用Tuple,在OnExecute中將參數對象轉換回Tuple。

public class YourConverter : IMultiValueConverter 
{      
    public object Convert(object[] values, ...)     
    {   
        Tuple<string, string> tuple = new Tuple<string, string>(
            (string)values[0], (string)values[1]);
        return (object)tuple;
    }      
} 

// ...

public void OnExecute(object parameter) 
{
    var param = (Tuple<string, string>) parameter;
}

我使用以下標準語法從我的XAML文件執行一條命令:

<Button Content="Zoom" Command="{Binding MyViewModel.ZoomCommand}"/>

這工作得很好,直到我意識到我需要來自視圖的兩條信息才能使用戶期望的方式完成此操作(特別是畫布的寬度和高度)。

看起來可以將一個數組作為參數傳遞給我的命令,但我沒有看到有方法可以指定對CommandParameter中的兩個畫布屬性的綁定:

<Button Content="Zoom" 
        Command="{Binding MyViewModel.ZoomCommand" 
        CommandParameter={Binding ElementName=MyCanvas, Path=Width}"/>

如何將寬度和高度傳遞給我的命令? 它似乎沒有可能使用來自XAML的命令,我需要在代碼隱藏中連接點擊處理程序以獲取此信息以傳遞給我的縮放方法。


在所選解決方案的轉換器中,應該添加values.Clone(),否則命令中的參數將為null

public class YourConverter : IMultiValueConverter
{
    public object Convert(object[] values, ...)
    {
        return values.Clone();
    }

    ...
}




command