WPFプロジェクト(C#、MVVM Light、Visual Studio 2010)があります。WPFビューモデル内のマウス座標の取得
私は基本的にこれが問題の分離に関する少しの問題を抱えています。私はビューモデルでコマンドを持っています。私は、そのコマンドを呼び出すコンテキストメニューを持っています。ここまでは順調ですね。問題は、マウスがクリックされたことをコマンドが調整する必要があることです。
もう少し具体的には、ContextMenuは、特定のCanvasコントロールをクリックすると表示され、そのキャンバスコントロール内の必要な座標内にあります。
これを行う簡単な方法は、XAMLドキュメントのコードの後ろにあるすべてのコードを管理することです(私はそうすることができました)が、できればViewModelに入れたいそう。その理由は、このコマンド内で自分のデータモデルを呼び出すため、分離の問題に終わるからです。
私はPassEventArgsToCommandを認識していますが、これは悪い習慣であることを認識していますが、この場合は回避方法がわかりません。だから、一瞬のために、私はそれを試してみました、そして、それは次のようになります。
<ContextMenu x:Key="BackgroundMenu">
<MenuItem Header="Add new node here">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cmd:EventToCommand Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}, Path=PlacementTarget.DataContext.AddNewNodeAtLocationCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</MenuItem>
</ContextMenu>
は、だから今、私のコマンドは、ビューモデルの中に、以下のようになります。私が好きな、そのメソッド内
void AddNewNodeAtLocationExecute(RoutedEventArgs e)
{
return;
}
をマウスの座標を取得することができますが、可能かどうかはわかりません。 e.OriginalSourceは 'MenuItem'ですが、あまり役に立ちません。
どうすればいいですか?これはできますか?あるいは、私はちょうどこのコマンドをコードの背後で処理する必要がありますか?このコードにはデータベースへの呼び出しが含まれます。そのため、私はその分離に関して非常に特化しています。
ありがとうございます。
実際のマウス座標、またはキャンバス内の要素のx座標とy座標が必要ですか? – mm8