拇指拖动在MVVM, WPF, c#

本文关键字:WPF MVVM 拖动 | 更新日期: 2023-09-27 18:04:06

我有一个用c# WPF编写的工作应用程序。我喜欢练习使用MVVM,所以我喜欢编写与MVVM相同的应用程序。但我遇到了一个问题。在我的应用中,我使用

<Thumb DragDelta="Thumb_Drag" 
       DragStarted="Thumb_DragStarted"
       DragCompleted="Thumb_DragCompleted"
       ...

我如何在MVVM中编写这个"拖放/拖放"示例?我用"binding"还是别的什么?任何例子都是非常受欢迎的:)谢谢!

如果有不明白的地方请问我

拇指拖动在MVVM, WPF, c#

可以使用System.Windows.Interactivity库,可以将其添加到您的项目中作为参考。

添加命名空间:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

通过<i:InvokeCommandAction>调用命令:

<Thumb>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="DragDelta">
            <i:InvokeCommandAction Command="{Binding DataContext.ThumbDragDeltaCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Thumb>

ViewModel:

private ICommand ThumbDragDeltaCommand { get; set;}
public MainViewModel() //Constructor
{
    ThumbDragDeltaCommand = new DelegateCommand(x => 
    {
        //EventHandler
        //Do stuff...
    }
}

但是,只要事件只触发图形化更改,您仍然可以在代码后台处理事件,同时仍然提交给mvvm模式。

根据您在这些事件处理程序中使用的逻辑类型,我认为在代码隐藏中使用它们没有问题。毕竟MVVM只是一个一般的指导方针,而不是严格的规则。
如果您坚持在视图模型中实现它们,您可以添加对System.Windows.Interactivity dll的引用,并使用Interaction.TriggerInvokeCommandAction

<Thumb>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Thumb_Drag" >
            <i:InvokeCommandAction Command="{Binding SomeViewModelCommand}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Thumb>