파일 메뉴에서 표준 "최근 파일"옵션을 구현하려고합니다. 아래 코드는 옵션 목록을 올바르게 표시하지만 fileName이 포함 된 하위 메뉴를 클릭하면 명령 바인딩이 작동하지 않습니다.메뉴 항목 최근 파일 xaml 구현 Mvvm
0
A
답변
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 속성에 제대로 바인딩 된 뷰 명령을 가져올 수 있어야합니다.
희망이 도움이됩니다.
ItemSource는 ObservableCollection 문자열에 바인딩됩니다. 내가 추천 한 솔루션을 시도했지만 함수 호출이 여전히 트리거되지 않습니다. – Methalous
@Methalous, 글쎄, 나는 새로운 WPF 앱으로 내 자신을 테스트했으며 잘 돌아갔습니다. 어쩌면 또 다른 문제가 있습니다. 나는 당신과 프로젝트를 공유하고 있는데 아마도 당신이 어떤 문제를 찾는데 도움이 될 것입니다. clone [this] (https://github.com/ktamayop/WpfMenuSample) repo 명령을 처리하는 메서드에서 중단 점을 설정하면 충돌이 발생하는 것을 볼 수 있습니다. –