【问题标题】:Thumb Drag in MVVM, WPF, C#MVVM、WPF、C# 中的拇指拖动
【发布时间】:2015-10-12 08:41:03
【问题描述】:

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

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

我如何在 MVVM 中编写这个“Drag&Drop/Draggable”示例?我使用“绑定”或其他什么?任何示例都将受到欢迎:) 谢谢!

如果不明白请问我。

【问题讨论】:

    标签: c# wpf mvvm slider draggable


    【解决方案1】:

    可以使用System.Windows.Interactivitylibrary,它可以作为参考添加到您的项目中。

    添加命名空间:

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

    并通过&lt;i:InvokeCommandAction&gt;调用命令:

    <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 模式,只要事件仅触发图形更改。

    【讨论】:

    • 这与我发布的答案有何不同?
    • 互联网上任何地方的任何例子?只是为了填满它:)用一些例子总是更容易:)
    • @esispaned 我会说谷歌“WPF Commands MVVM”和“WPF DelegateCommand”。网上有很多资源,谷歌是你的朋友 :) 另外,如果这是你正在寻找的答案,请考虑将其标记为已接受的答案。旁注,DelegateCommand 类还不是 BCL 的一部分,但您可以在此处找到实现:link
    【解决方案2】:

    根据您在这些事件处理程序中的逻辑类型,我认为将它们放在代码隐藏中不会有问题。毕竟 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2019-06-13
      • 2021-03-23
      相关资源
      最近更新 更多