MVVM、WPF、C# 中的拇指拖动

4

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

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

我该如何在MVVM中编写“拖放/可拖动”示例?我使用“绑定”还是其他方法?任何示例都非常欢迎 :) 谢谢!
如果您不理解,请问我。
2个回答

4

可以使用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>

视图模型:

private ICommand ThumbDragDeltaCommand { get; set;}

public MainViewModel() //Constructor
{
    ThumbDragDeltaCommand = new DelegateCommand(x => 
    {
        //EventHandler
        //Do stuff...
    }
}

然而,只要事件仅触发图形更改,您仍然可以在代码后端处理事件,同时仍然致力于MVVM模式。


这与我发布的答案有何不同? - user2697817
有没有互联网上的任何示例?只是为了更好地理解它 :) 有一些示例总是更容易的 :) - esispaned
我建议你搜索“WPF Commands MVVM” 和 “WPF DelegateCommand” 在谷歌上。网上有很多资源,谷歌是你的朋友 :) 另外,如果这是你在寻找的答案,请考虑将其标记为已接受的答案。顺便说一下,DelegateCommand 类目前还不是 BCL 的一部分,但你可以在这里找到实现方法:链接 - Hjalmar Z

3

根据事件处理程序中的逻辑不同,将其放在代码后端似乎没有问题。毕竟,MVVM只是一个一般性的指导方针,而不是严格的规则。
如果您坚持要在视图模型中实现它们,则可以添加对System.Windows.Interactivity dll的引用,并使用InvokeCommandActionInteraction.Trigger

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接