WPF MVVM:从View Model访问listview对象

时间:2017-07-03 12:54:32

标签: c# wpf listview mvvm

我有一个Listview。我已经实现了MVVM模式。

现在,在View中,我为listview定义了ItemContainerStyle,如下所示:

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
             <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
             <EventSetter Event="PreviewMouseLeftButtonDown" Handler="lstItemContact_MouseDown" />
             <EventSetter Event="PreviewMouseMove"  Handler="lstItemContact_MouseMove" />
    </Style>
</ListView.ItemContainerStyle>

并且在后面的代码中( xaml.cs )我有以下事件,例如,PreviewMouseLeftButtonDown:

    private void lstItemContact_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed)
        {

            // Get the current mouse position
            Point mousePos = e.GetPosition(null);
            Vector diff = _startPoint - mousePos;

            if (
    Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance ||
    Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)
            {
                if (e.Source != null)
                {
                    List<DataModel> myList = new List<DataModel>();
                    foreach (DataModel Item in lvUsers.SelectedItems)
                    {
                        myList.Add(Item);
                    }

                    DataObject dataObject = new DataObject(myList);
                    DragDrop.DoDragDrop(lvUsers, dataObject, DragDropEffects.Move);
                }
            }
        }
    }

lstItemContact_MouseMove事件是我实施的拖放功能的一部分。

lvUsers是我在View和我的数据模型中的listview,因为你假设是DataModel。

它工作正常,但现在我想将“lstItemContact_MouseMove”事件从视图移动到我的视图模型并使用ICommand(也许可以将listview对象作为参数传递给ICommand,我不知道) 。我的问题是我不知道如何从View Model访问我的listview(lvUsers),以便将listview作为参数传递给函数:

DragDrop.DoDragDrop(lvUsers, dataObject, DragDropEffects.Move);

在“lstItemContact_MouseMove”事件中。

那我怎么能这样做呢?

1 个答案:

答案 0 :(得分:2)

我认为您案件的最佳做法可能是:

  1. 将其留在代码隐藏中,不要担心。
  2. 制定行为。
  3. 您的ViewModel不应该关注像Drag&amp ;;这样的UI问题。删除,但单独的Behavior是放置它的好地方。

    您还可以在MSDNCodeProject

    了解相关信息