c# wpf button mvvm icommand

c# - icommand xamarin



Múltiples parámetros de comando wpf button object (2)

¿Cómo puedo enviar múltiples parámetros desde Button en WPF ? Puedo enviar el parámetro único que es el valor de TextBox correctamente. Aquí está el código.

XAML

<TextBox Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="133,22,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" /> <Button Content="Button" Grid.Row="1" Height="23" Command="{Binding Path=CommandClick}" CommandParameter="{Binding Text,ElementName=textBox1}" HorizontalAlignment="Left" Margin="133,62,0,0" Name="button1" VerticalAlignment="Top" Width="75" />

Code behind

public ICommand CommandClick { get; set; } this.CommandClick = new DelegateCommand<object>(AddAccount); private void AddAccount(object obj) { //custom logic }


¿Cómo puedo enviar múltiples parámetros desde el botón en wpf?

Solo puede enviar un parámetro como parámetro de CommandParameter .

Una solución mejor suele ser vincular el TextBox y otros controles a múltiples propiedades en su ViewModel. El comando tendría acceso a todas esas propiedades (ya que está en la misma clase), sin necesidad de ningún parámetro de comando.


Además de utilizar el enfoque de definir propiedades en su clase (llamémoslo su ViewModel) para que su vista lo vincule, hay momentos (no comunes) en los que no queremos hacerlo, una herramienta importante para saber en estas situaciones son el MultiBinding, por lo que, para completar, aunque esté satisfecho con la primera opción, abordaré otro enfoque.

para responder a tu pregunta:

1. Enfoque MVVM:

Utilice el enfoque MVVM y defina las propiedades enlazadas por su vista, y use esas propiedades en el comando de su ViewModel sin la necesidad de CommandParameters.

2. MultiBinding: (puede vivir felizmente con el enfoque MVVM)

Pasar el parámetro de comando como un parámetro multi binded como se ve aquí:

<Button Content="MultiBindingExample" Command="{Binding MyCommand}"> <Button.CommandParameter> <MultiBinding Converter="{StaticResource MyMultiConverter}"> <Binding Path="..." ElementName="MyTextBox"/> <Binding Path="..." ElementName="MySomethingElse"/> </MultiBinding> </Button.CommandParameter> </Button>

Con su Convertidor Definido utilizando la Interfaz IMultiValueConverter :

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

y para extraer los valores: simplemente consulte el parámetro en su comando como un Object[] y use los parámetros en el mismo orden que en el Enlace Múltiple.