2013-01-24 2 views
4

그래서 MVVM을 배우는 동안 문제가 발생했습니다. TreeView에서 TextBlocks 중 하나를 두 번 클릭했을 때 작업을 수행하려고하는 TextBlocks가 포함 된 TreeView가 있습니다. Behaviors에 대해 배우기 시작했고, 어떻게 행동이 구현되는지에 대한 좋은 예가 있지만 예제에서는 Behavior를 ViewModel에 연결하지 않습니다. 즉, TextBlock을 두 번 클릭하면 Behavior 클래스가 catch되지만 모든 작업을 수행 할 ViewModel이 없습니다.Behaviors와 ViewModel은 MVVM과 어떤 관련이 있습니까?

누군가가 잠시 시간을내어 이러한 넥타이를 어떻게 설명 할 수 있습니까? 나는이 기사를 검토하고 있었다 : http://msdn.microsoft.com/en-us/library/gg430869(v=pandp.40).aspx 그러나 나는 내가 무엇을 찾고 있었는지 파악하지 못했다.

답변

8

MVVM 개념은 xaml.cs 파일에 더 이상 코드가 없음을 의미하는 WPF 응용 프로그램의 디커플링 메커니즘을 제공합니다. 첨부 된 동작은 다른 것입니다. MVVM과 관련이 없습니다.

하지만 MVVM을 사용할 수없는 시나리오가 있다면 더블 클릭으로 TextBox의 텍스트를 선택하십시오. 텍스트 상자에 추가 할 동작은 무엇입니까?

xaml.cs 파일에서 더블 클릭 기능을 구현하는 것이 더 좋으며 재사용이 불가능하고 단단히 결합되어 있기를 선호합니다.

여기가 동작이 그림이되는 곳입니다. TextBox의 비헤이비어를 만들고 첨부 할 것입니다. 이제 원하는만큼 많은 컨트롤에이 동작을 첨부 할 수 있습니다.

편집 :

WPF 4.5를 사용하는 경우. 너는 볼 수있다 Markup Extensions for events

붙어 있던 행동에 그것을하고 싶으면. Command 의존성 속성이있는 더블 클릭 이벤트의 동작을 생성합니다. 두 번 클릭 동작은 첨부 된 명령을 올리고 xaml에서 명령을 viewmodel로 바인드합니다.

희망, 나는 당신의 의견에 대답 할 수 있습니다.

+1

D J - 내가 만든 동작 클래스가 ViewModel 자체와 아무 관계가 없습니까? 예를 들어 TreeView가 있고 TreeView에서 노드를 두 번 클릭하면 해당 노드를 삭제하려고합니다. Behavior 클래스에서 DoubleClickEvent를 잡을 때 TreeView의 ItemsSource에 대한 액세스 권한이 없습니다 (ViewModel에 저장 됨). – Tada

+0

+1 좋은 질문입니다. 나는 당신을 위해 대답을 편집했습니다. –