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)