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
}
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.
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.