ビュー内のWPFイベントをViewModelにバインドするにはどうすればよいですか?ViewからViewModelへのWPFイベントバインディング?
私のビューでドロップイベントが発生しましたが、私はそれをViewModelのバインディングに置き換えたいと思います。 いくつかの解決策を見つけましたが、私の考えたことはありませんでした。
ビューコード:行うには
<TextBox
AllowDrop="True"
PreviewDrop="email_Drop" />
ビュー内のWPFイベントをViewModelにバインドするにはどうすればよいですか?ViewからViewModelへのWPFイベントバインディング?
私のビューでドロップイベントが発生しましたが、私はそれをViewModelのバインディングに置き換えたいと思います。 いくつかの解決策を見つけましたが、私の考えたことはありませんでした。
ビューコード:行うには
<TextBox
AllowDrop="True"
PreviewDrop="email_Drop" />
一つの方法は、ブレンドの対話機能を使用することです。この名前空間には、InvokeCommandActionクラスとCallMethodActionクラスが含まれています。
InvokeCommandActionを使用すると、任意のイベントをview-modelコマンドにバインドできますが、CallMethodActionでは任意のイベントをビューモデルメソッドにバインドできます。
例えばあなたはこのように行うだろうビュー-modelコマンドをボタンのDoubleClickイベントをバインドしたい場合:
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
すべてのあなたは:
<Button>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding Path=DoSomethingCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
そして、この名前空間を宣言Expression BlendまたはExpression Blend SDKをインストールするのがプロジェクトで参照する必要があります。
まあ一つの方法は、イベントの振る舞いを定義することによって、すなわち、コマンドにそのイベントを変換し、発表者のコマンドにバインドすることです。
これを参照してください、MVVMとXAMLでイベントを処理するWPF Event Binding to ViewModel (for non-Command classes)
<Button MouseDoubleClick="{eb:EventBinding Command=DoSomethingCommand}">
</Button>
コマンド
{EB:EventBinding}(コマンドを見つけるための簡単な命名パターン)
{EB:EventBindingコマンド=のCommandName}
CommandParameter
$ e(EventAgrs)
$このまたは芋のviewmodelにイベントを結合$ this.Property
文字列
は良いアイデアになることはありません。もちろん、MVVMをどのように動作させたいかによって異なりますが、私たちは論理的なイベントであるイベントとビジネスロジックであるコマンドを厳密に分離しています。ちょうどこれを追加したかったのです:最終的には、どのようにして達成したいのかによって大きく異なります。 – dowhilefor
ありがとう、素晴らしいコメント私はこれを念頭に置いておきます。今のところ、ファイルの背後にあるコードを空にしたいだけです。しかし、私があなたが読んだすべてのものから正しいです;) – jefsmi
@dowhileforそれは答えです - それは良いものです。私は何かを書くことをお勧めします。 :) – ANeves