2011-06-13 2 views
1

사이에 이벤트 및 EventArgs입니다 매개 변수를 수신 I 엄지 제어에 의해 슬로우 마우스 드래그 이벤트를 처리하는 다음과 같은 코드가 있습니다. 그것은 표준 SettingView.xaml 등 뒤에 코드 SettingView.xaml.cs WPF의 MVVM (명령을 사용하여) 전달하고 뷰와 뷰 모델

하지만 어떻게 난 내 SettingViewModel.cs 파일이 처리하나요에서 잘 작동합니다.

지금까지 내가 매개 변수를 DelegateCommand (또는 RelayCommand)를 사용하여 클릭을 연결할 수 있었다,하지만 내가 어떻게 이벤트가 보낸 매개 변수에서 입력을받을 수 있나요? 예를 들어 드래그 이벤트는 이벤트 인수 e.HorizontalChange 및 e.VerticalChange를 제공합니다. 제 코드의 프로토 타입을 아래에서 보시기 바랍니다.

모든 우아한 해결책

은 많이 감사합니다.

미리 감사드립니다.

============================================== ==================== SettingView.xaml

Thumb Name = "thumbWest" 직접 명령에 선언 된 바인딩에 의해 뒤에 코드를 제거하기에 대한 DragDelta = "thumbWest_DragDelta

SettingView.xaml.cs

private void thumbWest_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) 
    { 
     _captureMargin.Left = _captureMargin.Left + e.HorizontalChange; 

     if (e.HorizontalChange < 0) 
     { 
      // Drag towards West 
      _widthRect = _widthRect + Math.Abs(e.HorizontalChange); 
     } 

     if (e.HorizontalChange > 0) 
     { 
      // Drag towards East 
      _widthRect = _widthRect - e.HorizontalChange; 
     } 

}

답변

1

MVVM 회담 뷰에 대한 ViewModel. 이 명령은 명령을 바인딩 할 수있는 ICommand 속성이있는 Button과 같은 컨트롤에 유용합니다. 그러나 컨트롤이 ICommand를 공개하지 않는 다른 모든 상황이나 perticualr 이벤트에 대한 특정 동작을 원할 경우 다음 두 가지 접근 방식 중 하나를 사용합니다.

1 - 간단한 접근 방식을 원할 경우 이벤트 처리기를 정의하고 특정 매개 변수의 이벤트 핸들러에서 ViewModel 명령 (RelayCommand)을 호출하십시오. 귀하의 경우 코드는 다음과 같이 표시됩니다 -

우리는 우리가 심지어 핸들러에서 어떤 UI 로직을 추가하지 않았기 때문에 나는 그것이 좋은 느낌 여기 뒤에 코드에 코드를 추가하고 있지만
private void thumbWest_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) 
{ 
    viewModel.DoSomthingCommand.Execute(new DoSomethingCommandParam(e.HorizontalChange)) 
} 

. 적절한 매개 변수로 ViewModel의 Command 만 실행하고 있습니다.

2 - 코드에 코드를 넣는 것에 완전히 반대하는 경우 끌어서 놓기를 처리하기 위해 연결된 동작을 만들고이를 컨트롤에 연결합니다. 그런 다음 첨부 된 동작에서 ViewModel 명령을 호출합니다. 당신은 Souvik 응답에 대한 첨부 행동을 here

+0

감사 사용에 대한 좋은 자습서를 찾을 수 있습니다. ViewModel과 View 사이에서 XAML을 사용하는 프레임 워크 조쉬 스미스 (Josh Smith) 샘플을 따르기 때문에 첫 번째 접근법에 대해서는 내 usercontrol 내에 Viewmodel의 인스턴스가 없습니다. 비록이 경로를 통해 갈 수 있을지 확신 할 수 없다는 것은 매우 간단합니다. 두 번째의 경우 , 나는 XAML을 사용하는 방법을 이해 NT 수 있습니다. xaml 코드의 일부 야구장 프로토 타입을 제공해 주시겠습니까? –

+0

잠시 동안 두 번째 방법을 사용하는 방법에 대한 예제를 제공합니다. 첫 번째에 대해서는 ViewModel이 View의 DataContext 여야합니다. 따라서 Usercontrol \ window (View)의 DataContext 속성을 ViewModel 클래스로 캐스팅하고 ViewModel을 사용하여 ViewModel을 가져올 수 있습니다. –

+0

건배 Souvik, MVVM을 사용하여 레이어링의 목적을 패배시키기 때문에, 첫 번째 접근 방식은 정상적으로 작동하지만 임시 처리가 가능합니다. 사실 나는 메서드를 공개하고 viewmodel 객체의 인스턴스에서 직접 호출 할 수 있습니다. 이제 AttachedBehaviour에 다시 한 번 시도해 보겠습니다. –