[英]WPF Mvvm move mouse button event to Command
我開始使用 MVVM,但我發現很難復制我對事件所做的簡單事情:我有一個 canvas,我想獲得鼠標單擊的 position,所以我執行了一個命令,xaml 就是這個
<Canvas x:Name="cnvLeft">
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseDown">
<cmd:EventToCommand Command="{Binding CanvasClick}"
PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Canvas>
但是它只傳遞鼠標 arguments,這還不夠,因為我需要發件人,我該如何解決這個問題?
正如已經推薦的那樣:為鼠標單擊事件注冊一個公共事件處理程序。
MVVM 不關心代碼隱藏。 使用代碼隱藏是絕對好的,甚至是必要的。
代碼隱藏文件是一種編譯器功能,即語言功能(部分類)。 它們與應用程序架構無關。 MVVM 不關心編譯器——沒有設計模式關心。
MVVM 也不關心命令(或數據綁定或任何框架概念)。 命令是框架基礎設施的一部分,MVVM 不關心框架——沒有設計模式關心。
MVVM 並不意味着使用命令。 事件通常一樣好。 所以不要強行命令。 與其使用交互行為將輸入事件轉換為命令,不如直接處理事件(當然是在視圖中)。
控件必須始終在 MVVM 應用程序的視圖中處理。 控件的代碼隱藏文件是部分 class。它是控件的一部分,因此也是視圖的一部分。
在宿主控件的代碼隱藏中實現用戶輸入事件處理程序。 這里必須實現Canvas
相關邏輯(UI邏輯)。
如果要封裝邏輯,可以將其與Canvas
一起移動到新的UserControl
Control
。
主窗口.xaml
<Window>
<Canvas PreviewMouseDown="OnCanvasePreviewMouseDown" />
</Window>
MainWindow.xaml.cs
private void OnCanvasePreviewMouseDown(object sender, MouseButtonEventArgs e)
{
var canvas = sender as Canvas;
Point canvasClickPosition = e.GetPosition(canvas);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.