You can use a MultiValueConverter.
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
}
And in 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>
You can remove the code in ItemContainerStyle.