我有以下代码处理拇指控件抛出的鼠标拖动事件。它适用于标准代码,例如SettingView.xaml和SettingView.xaml.cs
但我如何在我的SettingViewModel.cs文件中处理此问题。
到目前为止,我能够使用带有参数的DelegateCommand(或RelayCommand)连接点击,但是如何从事件发送的参数中获取输入?例如,拖动事件提供事件参数e.HorizontalChange和e.VerticalChange。请看下面我的代码的原型。
非常感谢任何优雅的解决方案。
提前致谢。
=============================================== =================================== SettingView.xaml
Thumb Name =“thumbWest”DragDelta =“thumbWest_DragDelta
SettingView.xaml.cs
private void thumbWest_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
_captureMargin.Left = _captureMargin.Left + e.HorizontalChange;
if (e.HorizontalChange < 0)
{
// Drag towards West
_widthRect = _widthRect + Math.Abs(e.HorizontalChange);
}
if (e.HorizontalChange > 0)
{
// Drag towards East
_widthRect = _widthRect - e.HorizontalChange;
}
答案 0 :(得分:1)
1 - 如果我想要一个简单的方法,我定义一个事件处理程序并从特定参数的事件处理程序调用ViewModel命令(RelayCommand)。在您的情况下,代码将如下所示 -
private void thumbWest_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
viewModel.DoSomthingCommand.Execute(new DoSomethingCommandParam(e.HorizontalChange))
}
虽然我们正在向这里的代码添加代码,但我觉得很好,因为我们没有在even处理程序中添加任何UI逻辑。它只在ViewModel中使用适当的参数执行命令。
2 - 如果我完全反对在代码中添加任何代码,我将创建一个附加行为来处理拖放并将其附加到控件。然后从附加行为中调用ViewModel命令。 您可以找到关于使用附加行为here
的精彩教程