我在WPF中有以下MenuItem:
<MenuItem
x:Name="Menu1"
ItemsSource="{Binding ListOfObject1}" Visibility="{Binding ListOfObject1, Converter={u:NullToVisibleConverter}}"
>
<MenuItem.Style>
<Style>
<Setter
Property="Control.IsEnabled"
Value="true"
/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition
Binding="{Binding PropertyInViewModel, Converter={baseTc:IsNullConverter} }"
Value="true"
/>
<Condition
Binding="{Binding ElementName=Menu1, Path=Items.BoolInObject1}"
Value="True"
/>
</MultiDataTrigger.Conditions>
<Setter
Property="Control.IsEnabled"
Value="False"
/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
</MenuItem>
所以如果Property IsEnabled=false
为null并且属性PropertyInViewModel
为true,我希望我的MenuItem为BoolInObject1
。 DataContext设置为ViewModel。对象Object1
在别处定义。所以基本上我的第二个条件不起作用,即我需要从itemssource访问item / object的属性以检查是否启用了此项。
有人可以解释一下如何做到这一点吗?那么如何定义第二个条件以访问绑定到ItemsSource的对象的属性。
提前致谢。
答案 0 :(得分:0)
子菜单项不会继承Style
。将Style
应用于子菜单项的方式是MenuItem.ItemContainerStyle
,与ListBox
或ListView
一样;所有这些类都从ItemsControl
继承该属性以及ItemsSource
属性和其他一些属性。
每个子菜单项都有一个ListOfObject1
DataContext
项,因此绑定BoolInObject1
很容易。绑定PropertyInViewModel
更难,因为视图模型不会成为DataContext
。但是,它是父DataContext
的{{1}},您可以使用MenuItem
通过可视树来访问它。
我还为子菜单项的{RelativeSource AncestorType=MenuItem}
属性添加了一个setter;你自然需要改变被绑定的财产。我将Header
添加到您的TargetType
。
Style