2015-07-21 56 views
2

我找到允許在窗口中拖動網格的解決方案。但我正在使用MVVM。 如何在MVVM中完成?我需要使用什麼?內容控制或其他什麼?Mvvm在窗口中拖動網格

<Grid x:Name="grid" Background="Blue" 
    Width="100" Height="100" 
    MouseDown="Grid_MouseDown" MouseMove="Grid_MouseMove" MouseUp="Grid_MouseUp"> 
<Grid.RenderTransform> 
    <TranslateTransform x:Name="tt"/> 
</Grid.RenderTransform> 

<Window x:Name="window" ...> 
<Grid x:Name="grid"... 

Point m_start; 
Vector m_startOffset; 

private void Grid_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
m_start = e.GetPosition(window); 
m_startOffset = new Vector(tt.X, tt.Y); 
grid.CaptureMouse(); 
} 

private void Grid_MouseMove(object sender, MouseEventArgs e) 
{ 
if (grid.IsMouseCaptured) 
{ 
    Vector offset = Point.Subtract(e.GetPosition(window), m_start); 

    tt.X = m_startOffset.X + offset.X; 
    tt.Y = m_startOffset.Y + offset.Y; 
} 
} 

private void Grid_MouseUp(object sender, MouseButtonEventArgs e) 
{ 
grid.ReleaseMouseCapture(); 
} 

回答

2

沒有什麼用MVVM這裏做。如果你想移動東西並從鼠標/窗口獲取事件,只能通過後面的代碼完成。
MVVM命令/ RelayCommand用於model/viewmodel/View處理。不適用於鼠標,窗口交互。

你可以使用輸入綁定和更多,但基本上你在做什麼是正確的方式去