Mvvm 当视图模型属性等于菜单项';s头
我的视图模型上有一个属性“Mode”。每当这个属性改变时,我想看看它是否等于上下文菜单中的任何菜单项标题。如果它相等,我希望该菜单项的IsChecked属性设置为true。如何做到这一点 我尝试使用以下行设置值:Mvvm 当视图模型属性等于菜单项';s头,mvvm,binding,triggers,menuitem,datatrigger,Mvvm,Binding,Triggers,Menuitem,Datatrigger,我的视图模型上有一个属性“Mode”。每当这个属性改变时,我想看看它是否等于上下文菜单中的任何菜单项标题。如果它相等,我希望该菜单项的IsChecked属性设置为true。如何做到这一点 我尝试使用以下行设置值: ({Binding RelativeSource={RelativeSource Self}, Path=Header}) 但不能对值使用绑定。以下是我剩余的尝试,当前值为空: <ContextMenu> <ContextMenu.ItemContainer
({Binding RelativeSource={RelativeSource Self}, Path=Header})
但不能对值使用绑定。以下是我剩余的尝试,当前值为空:
<ContextMenu>
<ContextMenu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="IsChecked" Value="False" />
<Style.Triggers>
<DataTrigger Binding="{Binding Mode}" Value="???">
<Setter Property="IsChecked" Value="True"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContextMenu.ItemContainerStyle>
<MenuItem Header="{x:Static Name:ContextMenuStartNames.1}"/>
<MenuItem Header="{x:Static Name:ContextMenuStartNames.1}"/>
<MenuItem Header="{x:Static Name:ContextMenuStartNames.3}"/>
</ContextMenu>
您可以使用多值转换器
public class ModeMultiConverter:IMultiValueConverter
{
#region Implementation of IMultiValueConverter
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values.Length != 2 || values[0] == null || values[1] == null)
return Binding.DoNothing;
var mode = values[0].ToString();
var header = values[1].ToString();
return mode == header;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
在Xaml中:
<MenuItem.IsChecked>
<MultiBinding Converter="{StaticResource ModeMultiConverter}" Mode="OneWay">
<Binding Path="PlacementTarget.DataContext.Mode" RelativeSource="{RelativeSource AncestorType=ContextMenu}"/>
<Binding Path="Header" RelativeSource="{RelativeSource Self}"/>
</MultiBinding>
</MenuItem.IsChecked>
您可以删除ItemContainerStyle中的代码