簡體   English   中英

MVVM,WPF,C#中的Thumb Drag

[英]Thumb Drag in MVVM, WPF, C#

我有一個在C#WPF中編寫的工作應用程序。 我喜歡練習使用MVVM,所以我喜歡和MVVM一樣編寫應用程序。 但我遇到了一個問題。 在我的應用程序中我使用

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

我如何在MVVM中編寫這個“Drag&Drop / Draggable”示例? 我用“綁定”還是別的什么? 任何例子都會非常歡迎:)謝謝!

如果不明白請問我。

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

根據您在這些事件處理程序中使用的邏輯類型,我不會在代碼隱藏中看到它們存在問題。 畢竟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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM