我有一个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”事件中。
那我怎么能这样做呢?
答案 0 :(得分:2)
我认为您案件的最佳做法可能是:
您的ViewModel不应该关注像Drag&amp ;;这样的UI问题。删除,但单独的Behavior是放置它的好地方。
您还可以在MSDN或CodeProject
了解相关信息