我有一個列表視圖。我已經實現了MVVM模式。WPF 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(也許可以通過爲參數列表視圖對象的ICommand的,我不知道)。我的問題是,我不知道如何才能通過列表視圖作爲參數傳遞給函數訪問我從視圖模型的列表視圖(lvUsers):
DragDrop.DoDragDrop(lvUsers, dataObject, DragDropEffects.Move);
的「lstItemContact_MouseMove」事件中。
那麼我該如何做到這一點?
你爲什麼要實現在首位的視圖模型拖和拖放操作? – mm8
@ mm8那麼我在MVVM wpf中很新。因爲我不知道是否正確建立視圖和數據模型之間的依賴關係。這是一個很好的做法?它是否尊重MVVM原則? – user1624552