2009-11-02 3 views
1

현재 하나의 단추가있는 기본보기와 다른보기 (및 연관된 ViewModel) 인 ViewModel의 속성에 바인딩 된 ContentPresenter가 있습니다. ContentPresenter에로드 된 컨트롤에 선언 된 핸들러에서 명령을 라우트하는 방법이 있습니까? 내보기에는 도구 모음이 기본보기에 포함되어 있으며 콘텐츠 발표자에게는 콘텐츠가 있습니다. Microsoft MVVM 템플릿과 생성 된 DelegateCommand 클래스를 사용하고 있습니다.컨트롤 사이의 MVVM 명령 라우팅

<Window ...> 
    <Button x:Name="btnAction" Command="{Binding ActionCommand}" /> 
    <ContentPresenter Content="{Binding CurrentView}" /> 
</Window> 

답변

1

창과 컨트롤 모두에서 볼 수있는 클래스에 정적 개체 인 명령 개체를 만들어야합니다.

public static class MyCommands 
    { 
    public static RoutedUICommend CoolCommand .....; 
    } 

은 그럼 당신은 예를 들어, 명령 개체에 컨트롤의 명령 속성을 바인딩 할 수 있습니다 :

<Button Command="cmd:MyCommands.CoolCommand" /> 

그런 다음 당신은 단순히 CommandBinding을 XAML 요소를 사용하여 창 수준에서 결합 명령을 처리 할 필요가있다.

<CommandBinding Command="cmd:MyCommands.CoolCommand" Executed="My_Handler" /> 
+0

좋은 생각 같습니다. 호기심에서 물건을 연결하기위한 공유 명령 저장소가있는 것이 일반적인 WPF 연습입니까? – jwarzech

+1

이것은 물건을 서로 연결하는 표준적인 관례는 아니지만. 바인딩을 다른 방법으로 공유하지 않는 명령 핸들러에 명령을 바인드해야하는 경우에 더 일반적입니다. 이것은 기본적으로 내장 WPF 주석이 사용한 것과 동일한 메커니즘입니다 (예 : ApplicationCommands). –