MVVM、WPF、C# 中的拇指拖动
Posted
技术标签:
【中文标题】MVVM、WPF、C# 中的拇指拖动【英文标题】:Thumb Drag in 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”示例?我使用“绑定”或其他什么?任何示例都将受到欢迎:) 谢谢!
如果不明白请问我。
【问题讨论】:
【参考方案1】:可以使用System.Windows.Interactivity
library,它可以作为参考添加到您的项目中。
添加命名空间:
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 模式,只要事件仅触发图形更改。
【讨论】:
这与我发布的答案有何不同? 互联网上任何地方的任何例子?只是为了填满它:)用一些例子总是更容易:) @esispaned 我会说谷歌“WPF Commands MVVM”和“WPF DelegateCommand”。网上有很多资源,谷歌是你的朋友 :) 另外,如果这是你正在寻找的答案,请考虑将其标记为已接受的答案。旁注,DelegateCommand 类还不是 BCL 的一部分,但您可以在此处找到实现:link【参考方案2】:根据您在这些事件处理程序中的逻辑类型,我认为将它们放在代码隐藏中不会有问题。毕竟 MVVM 只是一般指导方针,而不是严格的规则。
如果您坚持在视图模型中实现它们,您可以添加对System.Windows.Interactivity
dll 的引用并使用InvokeCommandAction
和Interaction.Trigger
。
<Thumb>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Thumb_Drag" >
<i:InvokeCommandAction Command="Binding SomeViewModelCommand" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Thumb>
【讨论】:
以上是关于MVVM、WPF、C# 中的拇指拖动的主要内容,如果未能解决你的问题,请参考以下文章