Изучите двунаправленные карты повышения: http://www.boost.org/doc/libs/1_38_0/libs/bimap/doc/html/index.html
Это позволяет обоим значениям действовать как ключ.
Иначе, повторение является способом пойти.
Это потому, что визуальное дерево, созданное вашим DataTemplate
, будет заключено в контейнер - в данном случае в MenuItem
. Следовательно, у вас фактически есть MenuItem
внутри MenuItem
, что объясняет лишнее пространство и отсутствие интерактивности. Нет необходимости включать MenuItem
в ваш ItemTemplate
.
Вместо этого ваш пример может быть записан как:
<Menu>
<MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}">
<MenuItem.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</Menu>
Или, возможно, более кратко:
<Menu>
<MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding}"/>
<Setter Property="IsChecked">
<Setter.Value>
<MultiBinding Converter="{StaticResource YourConverter}">
<Binding .../>
<Binding .../>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
</Menu>