WPF + MVVM + RadioButton:处理与单个属性的绑定

Ami*_*shi 8 c# data-binding wpf mvvm radio-button

这个以及关于SO的这个(和其他)问题以及互联网上的许多其他材料,我理解了如何将单选按钮与VM绑定.

但是所有这些都为单选按钮的每个可能值创建了单独的属性.一个问题(这个)类似于我的要求,但接受的答案建议使用ListBox而不是单选按钮.

要表示人员性别(数据类型CHAR,可能值'M','F'),需要在VM中创建三个属性,如PersonGender,IsPersonMale,IsPersonFemale.我想只在一个属性PersonGender上控制它.我可以这样做吗?如果有,怎么样?

小智 14

你需要一个转换器.

//define this in the Window's Resources section or something similiarly suitable
<local:GenderConverter x:Key="genderConverterKey" />


<RadioButton Content="M" IsChecked="{Binding Gender, Converter={StaticResource ResourceKey=genderConverterKey}, ConverterParameter=M}" />
<RadioButton Content="F" IsChecked="{Binding Gender, Converter={StaticResource ResourceKey=genderConverterKey}, ConverterParameter=F}" />
Run Code Online (Sandbox Code Playgroud)

转换器

public class GenderConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return ((string)parameter == (string)value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return (bool)value ? parameter : null;        
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果在这种情况下不应用绑定,则将**null**(在ConvertBack中)替换为**Binding.DoNothing**.**返回(bool)值?参数:Binding.DoNothing;** (4认同)
  • 转换器中没有任何东西实际将其与Gender数据类型相关联。因此,您可以将其重命名以使其成为通用转换器。 (3认同)