WPFアプリのButton
sをCommand
クラスのVIEWMODEL
sにバインドするのは非常に簡単です。 TextBox
に対して同様のバインディングを実現したいと思います。
TextBox
があり、ヒットしたときに起動するCommand
にバインドする必要があります Enter TextBox
がフォーカスされている間。現在、私はKeyUp
イベントに次のハンドラーを使用していますが、見苦しい...そしてVIEWMODEL
クラスに入れることはできません。
private void TextBox_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == System.Windows.Input.Key.Enter)
{
// your event handler here
e.Handled = true;
MessageBox.Show("Enter Key is pressed!");
}
}
これを行うためのより良い方法はありますか?
Aryan、すべてのWPFオブジェクトがコマンドをサポートしているわけではありません。そのため、それを行いたくない場合は、ビハインドコードからビューモデルを呼び出すか(少し結合)、MVVMメッセージング実装を使用して分離する必要があります。例については、 MVVM Light Messagingツールキット を参照してください。または、次のような単純な使用トリガー:
<TextBox>
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyUp">
<i:InvokeDataCommand Command="{Binding MyCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
私は同じ問題に直面し、解決策を見つけました here 、ここにコードサンプルがあります:
<TextBox>
<TextBox.InputBindings>
<KeyBinding Command="{Binding Path=CmdSomething}" Key="Enter" />
</TextBox.InputBindings>
</TextBox>
Sarhの答えは好きですが、Enter
をReturn
に変更しない限り、私のプログラムでは機能しません。
<TextBox>
<TextBox.InputBindings>
<KeyBinding Key="Return" Command="{}" />
</TextBox.InputBindings>
</TextBox>