2017-07-03 14 views
0

私はリストビューを持っています。 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にlistviewオブジェクトを渡すことは可能かもしれませんが、 )。私の問題は、私は関数にパラメータとしてリストビューを渡すためにビューモデルからの私のリストビュー(lvUsers)へのアクセスを取得する方法がわからないということです:「lstItemContact_MouseMove」イベント内

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

どうすればいいですか?

+2

でそれについてまで読むことができますか? – mm8

+0

@ mm8まあ、私はMVVM wpfで非常に新しいです。ビューとデータモデルの間の依存関係を正しく設定するかどうかわからないためです。それは良い習慣ですか?それはMVVMの原則を尊重しますか? – user1624552

答えて

2

私はあなたのケースで最善の行動をすることができると思う:

  1. は、コードビハインドでそれを残し、それについて心配しないでください。
  2. それから行動を起こしてください。

あなたのViewModelはドラッグ&ドロップのようなUIの問題に関係してはならないが、別のBehaviorはそれを置くのに良い場所です。

また、あなたが最初の場所でビューモデルにドラッグアンドドロップ操作を実装するのはなぜMSDNまたはCodeProject

+0

私は非常にあなたの行動の解決が好きです。私はそれをやろうとします。私に何か問題があるなら、私はあなたに言うでしょう。 – user1624552

関連する問題