提问人:howze 提问时间:11/17/2023 更新时间:11/17/2023 访问量:53
使用MVVM时如何将MouseEvent和UIControl作为两个参数传递?
How to pass MouseEvent and UIControl as two parameters when using MVVM?
问:
我正在将图片查看器项目更改为 MVVM,XAML 代码如下。
<ScrollViewer Name="scrollViewer" HorizontalScrollBarVisibility="Visible">
<Grid Name="Mygrid" Width="400" Height="490" HorizontalAlignment="Stretch" >
<Grid.LayoutTransform>
<TransformGroup x:Name="TfGroup">
<ScaleTransform x:Name="MyscaleTransform"/>
</TransformGroup>
</Grid.LayoutTransform>
<Border x:Name="imgborder" HorizontalAlignment="Center" VerticalAlignment="Center">
<Image x:Name="Myimg" />
</Border>
<Canvas x:Name="canvas" Background="Transparent"/>
</Grid>
</ScrollViewer>
原始代码如下(不使用 MVVM):
private void OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
lastMousePositionOnTarget = Mouse.GetPosition(Mygrid);
System.Windows.Point centerPoint = e.GetPosition(Myimg);
var val = e.Delta * 0.01;
if (MyscaleTransform.ScaleX + val < 0.1) return;
if (MyscaleTransform.ScaleX + val > 100) return;
MyscaleTransform.CenterX = centerPoint.X;
MyscaleTransform.CenterY = centerPoint.Y;
MyscaleTransform.ScaleX += val;
MyscaleTransform.ScaleY += val;
}
我尝试使用 MVVM 并在 XAML 中添加以下代码:
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseWheel">
<i:InvokeCommandAction Command="{Binding TestCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
现在问题来了,在过去的代码中,我访问了 'Mygrid'、'Myimg' 等 UIControls,现在,在 ViewModel 中,如果接收到鼠标事件,我无法同时接收 UIControls 作为参数,
[RelayCommand]
private void Test(MouseWheelEventArgs e)
{
//How to receive UIControls 'Mygrid' ,'Myimg' as parameters?
lastMousePositionOnTarget = Mouse.GetPosition(Mygrid);
System.Windows.Point centerPoint = e.GetPosition(Myimg);
}
我搜索了相关帖子,但没有找到相关答案。他们中的大多数人都讨论了如何传递多个参数。我没有看到同时传递鼠标事件和参数,或者他们使用了较旧的 MVVMLight,现在已经过时了。
那么,如果我使用 CommunityToolkit.Mvvm,我该如何实现上述功能呢?
谢谢
答: 暂无答案
评论