MVVM,WPF,C#中的Thumb Drag

时间:2015-07-22 12:51:49

标签: c# wpf mvvm slider draggable

我在C#WPF中编写了一个正在运行的应用程序。我喜欢练习使用MVVM,所以我喜欢和MVVM一样编写应用程序。但我遇到了一个问题。在我的应用程序中我使用

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

我如何写这个&#34;拖放&拖放/拖拽&#34; MVVM中的例子?我使用&#34;绑定&#34;或者是其他东西?任何一个例子都非常欢迎:)谢谢!

如果不明白,请问我。

2 个答案:

答案 0 :(得分: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模式。

答案 1 :(得分: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>