WPF 多个RadioButton绑定Enum枚举类型
1、使用本地枚举参数{static local:xxxEnum.XXX}
local枚举类型必须在相同命名空间,我这里引用的一直报错找不到
// An highlighted block
<core:EnumToBooleanConverter x:Key="EnumToBooleanConverter" />
<RadioButton
Margin="30,0,0,0"
Content="JPG"
GroupName="Options"
IsChecked="{Binding SaveConfig.SaveFormat, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={static local:xxxEnum.XXX}}"
Style="{StaticResource MaterialDesignRadioButton}" />
public class EnumToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value == null ? false : value.Equals(parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value != null && value.Equals(true) ? parameter : Binding.DoNothing;
}
}
2.直接使用转换器,无需引用枚举
适用于不在同命名空间,当然core的EnumToBooleanConverter还是引用的
<core:EnumToBooleanConverter x:Key="EnumToBooleanConverter" />
<WrapPanel
Grid.Row="3"
VerticalAlignment="Center"
Orientation="Horizontal">
<TextBlock
Margin="40,0,0,0"
FontSize="16"
FontWeight="Bold"
Style="{StaticResource DefaultTextBlock}"
Text="图片保存格式" />
<RadioButton
Margin="40,0,0,0"
Content="BMP"
GroupName="Options"
IsChecked="{Binding SaveConfig.SaveFormat, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter=BMP}"
Style="{StaticResource MaterialDesignRadioButton}" />
<RadioButton
Margin="30,0,0,0"
Content="PNG"
GroupName="Options"
IsChecked="{Binding SaveConfig.SaveFormat, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter=PNG}"
Style="{StaticResource MaterialDesignRadioButton}" />
<RadioButton
Margin="30,0,0,0"
Content="JPG"
GroupName="Options"
IsChecked="{Binding SaveConfig.SaveFormat, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter=JPG}"
Style="{StaticResource MaterialDesignRadioButton}" />
</WrapPanel>
#region VM
//SaveConfig 为实体Entity,包含SaveFormatEnum枚举属性SaveFormat
public SaveConfig SaveConfig
{
get => _saveConfig;
set => SetProperty(ref _saveConfig, value);
}
#endregion
[ValueConversion(typeof(Enum), typeof(Boolean))]
public class EnumToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null || parameter == null || !Enum.IsDefined(value.GetType(), value))
return false;
return value.Equals(Enum.Parse(value.GetType(), parameter.ToString()));
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null || parameter == null || !(bool)value)
return Binding.DoNothing;
return Enum.Parse(targetType, parameter.ToString());
}
}