다른 모양과 기능을 가진 상황에 맞는 메뉴 항목을 제공하려고하지만 이러한 항목에 명령을 바인딩하는 방법을 찾을 수 없습니다. 각 메뉴 항목의보기 모델은 하나의 클래스 AbstractEntryViewModel
에서 파생됩니다. 다음은 현재 프로젝트의 구조를 요약 한 예입니다. ContextMenu.Resources
을 사용하면 템플릿을 특정 유형에 바인딩하는 유일한 방법입니다.여러 템플릿을 사용할 때`ContextMenu`에서`DataTemplate`에 명령을 바인드 하시겠습니까?
<ContextMenu ItemsSource="{Binding Entries}">
<ContextMenu.Resources>
<DataTemplate DataType="{x:Type local:NopEntryViewModel}">
<!-- Content -->
</DataTemplate>
<HierarchicalDataTemplate
DataType="{x:Type local:GroupEntryViewModel}"
ItemsSource="{Binding Entries}">
<!-- Content -->
</HierarchicalDataTemplate>
<!-- More templates -->
</ContextMenu.Resources>
</ContextMenu>
internal abstract AbstractEntryViewModel : INotifyPropertyChanged {
public abstract void Invoke();
// ...
}
internal NopEntryViewModel : AbstractEntryViewModel {
public override void Invoke() {}
}
internal GroupEntryViewModel : AbstractEntryViewModel {
public override void Invoke() { /* ... */ }
// ...
}
// More view models
은 일반적으로 내가 어떻게 데이터 템플릿과 같은 일을 할 수있는 MenuItem
<MenuItem Command="{Binding StaticResourceOrViewModelProperty}" />
과 같이에 명령을 결합 할 수있다? 거기에 보이지 않는 컨테이너, 데이터 템플릿의 내용에 대한 래퍼, 내가 명령을 바인딩하는 데 사용할 수 있습니까? 편의상
WOW, 매력처럼 작동합니다
당신이 같이
MVVM을 깨뜨리지 않습니다 :) 추가 설정자 인DataTemplates
가 함께 설정이