【发布时间】:2017-07-03 21:01:28
【问题描述】:
我有一个列表视图。我已经实现了 MVVM 模式。
现在,在视图中,我为列表视图定义了 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 是我在视图中的列表视图,而我的数据模型是你假设的 DataModel。
它工作正常,但现在我想将“lstItemContact_MouseMove”事件从视图移动到我的视图模型并使用 ICommand(也许可以将 listview 对象作为参数传递给 ICommand,我不知道) .我的问题是我不知道如何从 View Model 访问我的列表视图(lvUsers),以便将列表视图作为参数传递给函数:
DragDrop.DoDragDrop(lvUsers, dataObject, DragDropEffects.Move);
在“lstItemContact_MouseMove”事件中。
那么我该怎么做呢?
【问题讨论】:
-
为什么首先要在视图模型中实现拖放操作?
-
@mm8 我是 MVVM wpf 的新手。因为我不知道在视图和数据模型之间建立依赖关系是否正确。这是一个好习惯吗?是否尊重 MVVM 原则?