MVVM模式下实现Listview内部拖放功能

来源:互联网 发布:粉粉折淘宝返利官网 编辑:程序博客网 时间:2024/05/21 22:32

在MVVM模式下实现Listview内部各Item的拖放功能,便于调整各个Item的位置。

需要的组件:Interactivity.dll    和   Interactions.dll

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

xmlns:Interactions="http://schemas.microsoft.com/expression/2010/interactions"


在XAML文件中,设置相应的  DataContext

<ListView  ItemsSource="{Binding YourObjectCollection}">    <Interactivity:Interaction.Triggers>        <Interactivity:EventTrigger EventName="PreviewMouseLeftButtonDown">            <Interactions:CallMethodAction TargetObject="{Binding}" MethodName="PreviewMouseLeftButtonDownCommand"/>                </Interactivity:EventTrigger>            <Interactivity:EventTrigger EventName="MouseLeftButtonUp">                <Interactions:CallMethodAction TargetObject="{Binding}" MethodName="MouseLeftButtonUp"/>            </Interactivity:EventTrigger>    </Interactivity:Interaction.Triggers></ListView>

在 ViewModel中

public void PreviewMouseLeftButtonDownCommand(object sender,MouseButtonEventArgs e) //  MouseLeftButtonDown  可能也可以用{        ListView listview = sender as ListView;        HitTestResult result = VisualTreeHelper.HitTest(listview, Mouse.GetPosition(listview));        Rectangle rect = result.VisualHit as Rectangle;        if (rect != null)        {           YourObject source = rect.DataContext as YourObject ;        }//ObservableCollection<YourObject > YourObjectCollection;}public void MouseLeftButtonUp(object sender, MouseButtonEventArgs e){        ListView listview = sender as ListView;        HitTestResult result = VisualTreeHelper.HitTest(listview, Mouse.GetPosition(listview));        Rectangle rect = result.VisualHit as Rectangle;        if (rect != null)        {            YourObject dest = rect.DataContext as YourObject ;        }        //接下来就可以处理YourObjectCollection 中的  source  与  dest  了  ,source  需要可以引用到}


原创粉丝点击