Нет необходимости в параметризации команды, поскольку привязка будет делать все, но, как было отмечено, это будет возможно при использовании CommandParameter
.Здесь преобразователь получит параметр enum.
Пример:
<MenuItem Header="_Description" IsCheckable="True"
IsChecked="{Binding Path=DisplayMode_Current,
Converter={StaticResource EnumToBooleanConv},
ConverterParameter=Description}" />
<MenuItem Header="_Web-Page" IsCheckable="True"
IsChecked="{Binding Path=DisplayMode_Current,
Converter={StaticResource EnumToBooleanConv},
ConverterParameter=WebPage}" />
Преобразователь может выглядеть примерно так:
public class EnumToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// You could also directly pass an enum value using {x:Static},
// then there is no need to parse
string parameterString = parameter as string;
if (parameterString == null)
return DependencyProperty.UnsetValue;
if (Enum.IsDefined(value.GetType(), value) == false)
return DependencyProperty.UnsetValue;
object parameterValue = Enum.Parse(value.GetType(), parameterString);
return parameterValue.Equals(value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string parameterString = parameter as string;
if (parameterString == null)
return DependencyProperty.UnsetValue;
return Enum.Parse(targetType, parameterString);
}
}
Поскольку XAML все еще многословен(и избыточно!) вы можете пойти дальше, связав ItemsSource
родительского элемента MenuItem
со значениями перечисления, а затем работать с ItemTemplate
и ItemContainerStyle
.