如何在silverlight mvvm中实现多个单选按钮数据绑定?

时间:2013-01-02 13:08:23

标签: silverlight entity-framework mvvm

我对Silverlight5和MVVM模式有疑问..

在我的usercontrol窗口中,我有2个radiobutton控件,我使用GroupName="sex"将radiobutton控件组合在一起。

语法是:

<RadioButton IsChecked="{Binding EntityValue,Mode=TwoWay}" Content="Male"
             GroupName="Sex"
             Visibility="{Binding DataTypeID, Converter={StaticResource radioconverter}}"/>

<RadioButton IsChecked="{Binding EntityValue,Mode=TwoWay}" Content="Female"
             GroupName="Sex"
             Visibility="{Binding DataTypeID, Converter={StaticResource radioconverter}}"/>

我已成功使用Entity Framework将检查的值插入数据库。

例如:我的数据库将如下所示:

CustomerID  | CustomerName | EntityValue |
------------------------------------------
1           | raj          | Male
2           | reena        | Female

数据库名称为:CDetails

如果我选择了customerID=1,则意味着值Male要绑定到radioButton1

如果我选择了customerID=2,则意味着值Female要绑定到radioButton2

怎么可能?

1 个答案:

答案 0 :(得分:1)

您需要编写一个转换器来将EntityValue更改为布尔值,并为您希望它返回true的值传递一个参数:

<RadioButton IsChecked="{Binding EntityValue, Mode=TwoWay,
                         Converter={StaticResource MyConverter},
                         ConverterParameter=Male}"
             Content="Male"/>

<RadioButton IsChecked="{Binding EntityValue, Mode=TwoWay,
                         Converter={StaticResource MyConverter},
                         ConverterParameter=Female}"
             Content="Female"/>

然后转换器(假设你的男性/女性是一个字符串 - 如果没有,则替换演员):

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

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null || !(value is bool))
        {
            return string.Empty;
        }
        if (parameter == null || !(parameter is string))
        {
            return string.Empty;
        }
        if ((bool)value)
        {
            return parameter.ToString();
        }
        else
        {
            return string.Empty;
        }
    }
}