13

XAMLを次のようにマークアップする方法を知りたいです。に基づくオブジェクトを持つビューモデルがありますICommand

テキストボックスとボタンのあるフォームがあります。ボタンは、ICommandを介してオブジェクトにフックされますCommand="{Binding MyButtonInViewModel}"

私がやりたいのはCommandParameter、「検索」を呼び出すなど、テキストボックスのテキストにあるものと同じボタンを設定することですが、ビュー内のコントロールをフックする方法がわかりません。

4

3 に答える 3

23

次のXAMLは、TextBoxからのテキストをパラメーターとしてコマンドに渡すために機能するはずです。

<TextBlock x:Name="searchBox" />

<Button Command="{Binding MyButtonInViewModel}" 
        CommandParameter="{Binding Text, ElementName=searchBox}"/>
于 2013-03-07T14:09:34.830 に答える
7

ElementNameこれを行うには、バインディングにを設定します。次に例を示します。

<TextBox x:Name="textBox"/>
<Button Content="Button" 
        Command="{Binding ButtonCommand}" 
        CommandParameter="{Binding ElementName=textBox, Path=Text}"/>
于 2013-03-07T14:14:55.770 に答える
4

テキストボックスのテキストプロパティだけでなく、テキストボックス自体をボタンのコマンドパラメータにバインドすると、ビューモデルのテキストボックスを操作して、たとえばテキストプロパティをクリアできます。

<TextBox x:Name="searchBox" />

<Button Command="{Binding MyButtonInViewModel}"
        CommandParameter="{Binding ElementName=searchBox}" />

モデルコードを表示

private void SearchStuff(TextBox searchBox)
{
    //do stuff with searchBox.Text
    searchBox.Text = "";
}

検索結果とともに検索テキストを表示したままにしておきたいこの例では、おそらくあまり良くありません。ボタンがクリックされたときにテキストを「消費」したいロギングまたはメッセージングアプリに適しています。

于 2014-02-27T17:01:25.260 に答える