我有一个这样的嵌套上下文菜单:
<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
<MenuItem Header="Thing Count" ItemsSource="{Binding ThingsProvider}">
注意具有来自ThingsProvider的子项的Thing Count父MenuItem。
ThingsProvider提供了一个ThingViewModel列表,其中包含Thing和IsChecked属性。我希望能够从我的主视图模型控制IsChecked,并通过MenuItem从用户控制,但我遇到了问题;如果我像这样使用ItemContainerStyle。
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Path=Thing, Mode=OneWay}"/>
<Setter Property="IsChecked" Value="{Binding Path=IsChecked, UpdateSourceTrigger=PropertyChanged}"/>
</Style>
</MenuItem.ItemContainerStyle>
然后(可以预见我认为它是一种风格)它将观察ViewModel的IsChecked,但不会设置它。
如果我像这样使用ItemTemplate
<MenuItem.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Thing, Mode=OneWay}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
我无法访问MenuItem的IsChecked属性,因为我只获得了TextBlock。如果我将一个MenuItem放在ItemTemplate中,那么我最终会在我的UI中使用嵌套的MenuItems,它看起来很糟糕。
必须有办法做到这一点,但我现在很难过,有人可以帮忙吗?
干杯
富