2016-11-21 2 views
0

파일 메뉴에서 표준 "최근 파일"옵션을 구현하려고합니다. 아래 코드는 옵션 목록을 올바르게 표시하지만 fileName이 포함 된 하위 메뉴를 클릭하면 명령 바인딩이 작동하지 않습니다.메뉴 항목 최근 파일 xaml 구현 Mvvm

답변

0

최근 파일을 나타내는 데 사용중인 개체가 어떤 유형인지 알 수 없습니다. 비록 당신이 다른 유형을 사용하고있을지라도 나는 문자열을 사용하고 있다고 가정하고 있습니다.

바인딩 프레임 워크가보기 파일이 아니라 최근 파일을 나타내는 데 사용중인 유형의 OpenFileCommand라는 속성을 찾고 있기 때문에이 오류가 발생합니다.

<MenuItem x:Name="Menu" Header="File"> 
</Menu> 
: 예를 들어 메뉴 컨트롤에 이름을 넣어

:

그래서 해결책은 직접보기의 DataContext를 참조하는 뷰 모델의 명령에 결합하기 위해 바인딩 요소를 사용하는 것입니다

이제 메뉴의 DataContext에 바인딩 요소를 수행 할 수 있습니다 ItemsControl에의 명령 속성의 스타일 세터에서

<MenuItem Header="Recent Files" 
     ItemsSource="{Binding Path=RaptManager.RaptConfiguration.RecentFiles}" 
     Command="{Binding OpenFileCommand}"> 
    <ItemsControl.ItemContainerStyle> 
     <Style TargetType="MenuItem"> 
      <Setter Property="Header" Value="{Binding}" /> 
      <Setter Property="Command" Value="{Binding ElementName=Menu, Path=DataContext.OpenFileCommand}" /> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
</MenuItem> 

주 우리가 Menu 요소의 DataContext 속성의 Property OpenFileCommand를 참조하고있는 's'ItemContainerStyle. 그것은 요소 바인딩입니다. 그것에 대해 더 알고 싶다면 this 링크를 확인하십시오.

이렇게하면 뷰 모델의 Command 속성에 제대로 바인딩 된 뷰 명령을 가져올 수 있어야합니다.

희망이 도움이됩니다.

+0

ItemSource는 ObservableCollection 문자열에 바인딩됩니다. 내가 추천 한 솔루션을 시도했지만 함수 호출이 여전히 트리거되지 않습니다. – Methalous

+0

@Methalous, 글쎄, 나는 새로운 WPF 앱으로 내 자신을 테스트했으며 잘 돌아갔습니다. 어쩌면 또 다른 문제가 있습니다. 나는 당신과 프로젝트를 공유하고 있는데 아마도 당신이 어떤 문제를 찾는데 도움이 될 것입니다. clone [this] (https://github.com/ktamayop/WpfMenuSample) repo 명령을 처리하는 메서드에서 중단 점을 설정하면 충돌이 발생하는 것을 볼 수 있습니다. –