2013-04-11 204 views
14

Buttonから複数のパラメータをWPFに送信するにはどうすればよいですか?私はTextBoxの値である単一のパラメータを適切に送ることができます。ここにコードがあります。私はWPFのボタンから複数のパラメータを送信することができますどのように複数のコマンドパラメータwpfボタンオブジェクト

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 
} 
+0

希望する正確なパラメータ、そのタイプ、および理由を説明すると、われわれが手助けできるかもしれない。コマンドパラメータには「束縛」が1つしかありませんが、必要なものに応じて他のオプションがありますので、もっと情報をお願いします。 –

+0

たとえば、オブジェクト[](オブジェクト配列)を使用して、多くのパラメータを1つに変換できますが、その後すべてのパラメータを後でキャストする必要があります。それとも問題がありますか? – Master117

+0

こんにちはキング、それは別のコントロールでしょう。テキストボックスは良い仮定になることができます。 –

答えて

14

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

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

24

ビューでバインドするクラス(ビューモデルと呼ぶ)のプロパティを定義するアプローチを使用する以外に、私たちがそうしたくないときがありますこれらの状況を知るツールはマルチバインディングなので、完全性のために、最初のオプションに満足していても、別のアプローチを取り上げます。

1. MVVMアプローチ:

MVVMのアプローチを使用して、あなたのビューでバインドさにプロパティを定義し、を必要とせずに、あなたのViewModelのコマンドでこれらのプロパティを使用しますので、あなたの質問に答えるために

CommandParameters。

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と同じ順序でパラメータを使用します。

+2

あなたのコンバータは適切な値を返しますが、relayコマンドにアタッチされたメソッドでは配列を返しますが、配列要素はnullです。 –

+0

静的リソースを正しく定義しましたか?詳細については、スタティックリソースを定義する方法を参照するスタックパネルの例を参照してください。http://msdn.microsoft.com/en-us/library/windows/apps/hh758287.aspx –

+0

私は同じ問題に直面しています、値はnull以外はすべて完璧です。 – Amit

関連する問題