Saltar al contenido

Pasar dos parámetros de comando mediante un enlace WPF

Solución:

En primer lugar, si está haciendo MVVM, normalmente tendrá esta información disponible para su VM a través de propiedades separadas vinculadas a la vista. Eso le ahorra tener que pasar cualquier parámetro a sus comandos.

Sin embargo, también puede realizar un enlace múltiple y usar un convertidor para crear los parámetros:

<Button Content="Zoom" Command="{Binding MyViewModel.ZoomCommand">
    <Button.CommandParameter>
        <MultiBinding Converter="{StaticResource YourConverter}">
             <Binding Path="Width" ElementName="MyCanvas"/>
             <Binding Path="Height" ElementName="MyCanvas"/>
        </MultiBinding>
    </Button.CommandParameter>
</Button>

En tu convertidor:

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

    ...
}

Luego, en la lógica de ejecución de su comando:

public void OnExecute(object parameter)
{
    var values = (object[])parameter;
    var width = (double)values[0];
    var height = (double)values[1];
}

En el convertidor de la solución elegida, debe agregar valores Clone () de lo contrario, los parámetros en el comando terminan en null

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

    ...
}

Utilice Tuple en Converter y, en OnExecute, vuelva a convertir el objeto de parámetro en 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;
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *