将RadioButton绑定到Enum

时间:2015-07-27 13:46:17

标签: c# wpf data-binding enums radio-button

问题: 使用参数化转换器将Enum类型的属性绑定到RadioButtons。没有异常抛出,Radiobutton可能有验证问题(不确定)。测试时会显示RadioButtons周围的红框。

的信息: 试图使用给出的解决方案 How to bind RadioButtons to an enum?

我有一个像这样的枚举:

namespace crmVerwaltungstools.Models
{
   public enum CrmSystemType
   {
     Training = 0,
     Live = 1
   }
}

BooleanToEnumConverter:

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value.Equals(parameter);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value.Equals(true) ? (CrmSystemType)parameter : Binding.DoNothing;
    }

并在我的窗口内:

xmlns:models="clr-namespace:crmVerwaltungstool.Models"

     <StackPanel Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" Orientation="Horizontal">
          <StackPanel.Resources>
                <converter:RadioButtonIsCheckedToCrmSystemTypeConverter x:Key="RbIsCheckedToCrmSystemTypeConverter" />
          </StackPanel.Resources>

          <RadioButton Content="Schulungs-System" GroupName="rbg_SelectSystem"
                                 IsChecked="{Binding Path=SystemType, Converter={StaticResource RbIsCheckedToCrmSystemTypeConverter},
                                 ConverterParameter={x:Static models:CrmSystemType.Training}}"/>
          <RadioButton Content="Live-System" GroupName="rbg_SelectSystem"
                                 IsChecked="{Binding Path=SystemType, Converter={StaticResource RbIsCheckedToCrmSystemTypeConverter},
                                 ConverterParameter={x:Static models:CrmSystemType.Live}}"/>
      </StackPanel>

看不到任何错误。 (也许今天只看到了太多代码......)

感谢您的帮助!!

2 个答案:

答案 0 :(得分:1)

首先,您需要检查转换器中的值是否为空:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null)
        {
            return false;
        }
        return value.Equals(parameter);
    }

也可以在ConvertBack方法中执行此操作。

其次,写下你的xaml:

<StackPanel>
    <StackPanel.Resources>          
        <local:EnumToBooleanConverter x:Key="EnumToBooleanConverter" />          
    </StackPanel.Resources>
    <RadioButton IsChecked="{Binding Path=YourEnumProperty, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static local:YourEnumType.Enum1}}" />
    <RadioButton IsChecked="{Binding Path=YourEnumProperty, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static local:YourEnumType.Enum2}}" />
</StackPanel>

答案 1 :(得分:0)

问题解决了。

我在viewmodel中找到了一小段旧代码,我试图将我的枚举定义为内部类。

所以,基本上,我的程序混淆了使用的枚举 - viewmodel中的内部类或models文件夹中的外部类。

删除内部枚举后,一切正常。