キー押下イベントを処理する必要がある状況があります。これはA-Z、0-9のいずれでもかまいませんが、ViewModelで処理する必要があります。キーが押されたときは、ViewModelに渡す必要があります。私は、View1ViewModelがview1で自動配線されるように、プリズム6.0を使用しています。WPFでPrism 6を使用してViewModelでキープレスイベントを処理する方法は?
私は特定のキーについては扱うことができますが、すべてのキーで同じことを行う方法を知っています。
は私がViewModelに「KeyPressed」の性質を持っている、と私はコードビハインド
private void Window_PreviewKeyUp(object sender, KeyEventArgs e)
{
_mainWindowViewModel.KeyPressed = e.Key;
}
で以下のコードを試してみました。しかし、このコードは、プリズムのフレームワークのviewmodelのようView1ViewModelを更新しないと、結合が経由で見ます枠組み。 私はインタラクションを使用しようとしましたが、以下のコードをルートGrid
セクションに入れました。
<i:Interaction.Triggers >
<i:EventTrigger EventName="KeyUp">
<i:InvokeCommandAction Command="{Binding KeyUpEventCommand}"
CommandParameter="..."/>
</i:EventTrigger>
</i:Interaction.Triggers>
イベントは発生しますが、コマンドパラメータがなくnullになります。私はcommandParameterを渡す必要がありますが、それが何であるべきか分かりません! ViewModelには
:
public DelegateCommand KeyUpEventCommand { get; private set; }
private string strAlphabet;
public string Alphabets
{
get { return strAlphabet; }
set { SetProperty(ref strAlphabet, value); }
}
public MainWindowViewModel(IEventAggregator eventAggregator)
{
KeyUpEventCommand = new DelegateCommand(KeyUpEventHandler);
}
public void KeyUpEventHandler()
{
//This logic can be changed
if (Alphabets == "A")
{
// Perform some action
}
if (Alphabets == "B")
{
// Perform some other action
}
}
任意のアイデア/提案どのように私はこれを扱うことができますか?
をお試しください何が起こるのですか? PreviewKeyUpイベントハンドラが呼び出されますが、ビューモデルのKeyPressedプロパティの設定が呼び出されないか、何が呼び出されませんか? – mm8
質問を更新しましたが、KeyUpEventCommandは起動しましたが、キープレスの値は含まれていません。 – Debhere
ビューモデルクラスのKeyUpEventCommandはどのようにして正確に定義されていますか? – mm8