web-dev-qa-db-fra.com

Objet de bouton de paramètres de commande multiples wpf

Comment envoyer plusieurs paramètres depuis Button dans WPF? Je suis capable d'envoyer correctement un seul paramètre qui vaut TextBox. Voici le code.

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
}
18
Mandar Jogalekar

Comment puis-je envoyer plusieurs paramètres à partir du bouton dans wpf.

Vous ne pouvez envoyer qu'un seul paramètre en tant que CommandParameter.

Une meilleure solution consiste généralement à simplement lier le TextBox et d'autres contrôles à plusieurs propriétés de votre ViewModel. La commande aurait alors accès à toutes ces propriétés (car elle est dans la même classe), sans aucun besoin de paramètre de commande.

14
Reed Copsey

Outre l'utilisation de l'approche consistant à définir des propriétés dans votre classe (appelons-le votre ViewModel) pour être lié par votre vue, il y a des moments (peu communs) où nous ne voulons pas le faire, un outil important à savoir dans ces situations sont le MultiBinding, donc juste pour être complet, même si vous êtes satisfait de la première option, je couvrirai une autre approche.

donc, pour répondre à votre question:

1. Approche MVVM:

Utilisez l'approche MVVM et définissez les propriétés à lier par votre vue, et utilisez ces propriétés dans la commande de votre ViewModel sans avoir besoin de CommandParameters.

2. MultiBinding: (Peut vivre heureux avec l'approche MVVM)

Passer le paramètre de commande en tant que paramètre à plusieurs liaisons comme indiqué ici:

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

Avec votre convertisseur défini à l'aide de l'interface IMultiValueConverter:

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

et pour extraire les valeurs: il suffit de se référer au paramètre de votre commande comme Object[] et utilisez les paramètres dans le même ordre que dans MultiBinding.

27
Ron.B.I