web-dev-qa-db-ja.com

複数のコマンドパラメーターwpfボタンオブジェクト

ButtonWPFから複数のパラメーターを送信するにはどうすればよいですか? TextBoxの値である単一のパラメータを適切に送信できます。これがコードです。

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

WPFのボタンから複数のパラメーターを送信するにはどうすればよいですか?.

CommandParameterとして送信できるパラメーターは1つだけです。

より良い解決策は、通常、TextBoxおよびその他のコントロールをViewModelの複数のプロパティにバインドすることです。この場合、コマンドは(同じクラスにあるため)コマンドパラメータをまったく必要とせずに、それらすべてのプロパティにアクセスできます。

14
Reed Copsey

クラスでプロパティを定義する方法(ViewModelと呼びましょう)を使用してビューにバインドする以外にも、(あまり一般的ではありません)そうしたくない場合があります。これらの状況はMultiBindingであるため、完全を期すために、最初のオプションで満足している場合でも、別のアプローチについて説明します。

あなたの質問に答えるために:

1。MVVMアプローチ:

MVVMアプローチを使用して、ビューによってバインドされるプロパティを定義し、それらのプロパティをCommandParametersを必要とせずにViewModelのコマンドで使用します。

2。MultiBinding:(MVVMアプローチで幸せに暮らせる)

次に示すように、コマンドパラメータをマルチバインドパラメータとして渡します。

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

IMultiValueConverterインターフェースを使用して定義されたコンバーターで:

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

値の抽出:コマンドのパラメーターをObject[]として参照し、MultiBindingと同じ順序でパラメーターを使用します。

27
Ron.B.I