拇指拖动在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"还是别的什么?任何例子都是非常受欢迎的:)谢谢!
如果有不明白的地方请问我
可以使用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.Trigger
和InvokeCommandAction
。
<Thumb>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Thumb_Drag" >
<i:InvokeCommandAction Command="{Binding SomeViewModelCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Thumb>