gpt4 book ai didi

wpf - 如何在WPF 3D应用程序中MVVM调整此MouseDown代码?

转载 作者:行者123 更新时间:2023-12-03 10:24:45 24 4
gpt4 key购买 nike

我认为,我有:

<UserControl x:Class ... MouseDown="UserControl_MouseDown"> 
<Viewport3D Name="Viewport" Grid.Column="0">
...
</Viewport3D >
</UserControl>

在我的后台代码中,我有:
private void UserControl_MouseDown(object sender, MouseButtonEventArgs e)
{
((MapPanelViewModel)DataContext).OnMouseDown(e, Viewport);
}

在我的 View 模型中,我有:
public void OnMouseDown(MouseEventArgs e, Viewport3D viewport)
{
var range = new LineRange();
var isValid = ViewportInfo.Point2DtoPoint3D(viewport, e.GetPosition(viewport), out range);
if (!isValid)
MouseCoordinates = "(no data)";
else
{
var point3D = range.PointFromZ(0);
var point = ViewportInfo.Point3DtoPoint2D(viewport, point3D);
MouseCoordinates = e.GetPosition(viewport).ToString() + "\n" + point3D + "\n" + point;
}
}

我真的不太了解如何使用MVVM处理鼠标事件。我总是总是将它们放在代码后面,并将 DataContext转换为 SomeViewModel,然后将 MouseEventArgs传递给我的 View 模型中的处理程序。那已经够糟糕的了,但是在这种情况下,我实际上传递了一个控件( Viewport3D),这对于在2D和3D之间转换坐标是必需的。

关于如何使它更适合MVVM的任何建议?

最佳答案

我认为这是将MVVM拖得太远的情况。 MVVM当然不是精确定义的,但是我想从试图将我的应用程序的高级机制和行为与如何使用特定UI技术实现这些机制和行为的细节中分离出来的想法来考虑(如今只是WPF) ,当然,但我发现假装可能还有其他有用的方法。

在不知道您的应用程序应该如何响应鼠标事件的情况下,很难给出具体的建议或意见。根据我的观察,我认为坐标转换最好留在UI层中,然后转换后的坐标将通过方法调用传递给ViewModel。

关于wpf - 如何在WPF 3D应用程序中MVVM调整此MouseDown代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2916601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com