当我们需要进行性别这一属性的绑定的时候,就会发现,两个 RadioButton控件都跟一个Gender属性关联。其实我们在绑定控件时还会遇到这样一个问题:属性是一个bool类型,但需要绑定控件的Visiility属性。这个问题也可以在本文介绍的方法得到解决。
控件在绑定时,是可以设置一个Converter的。Convefrter有两个方法,分别是Covnert和ConvertBack。Convert用于将数据格式化之后,显示到控件上。而ConvertBack就是在界面端修改了控件状态,数据应该如何变化。
以下是比较通用的RadioButton的Converter
using System;
using System.Globalization;
using System.Windows.Data;
namespace LoginDemo.ViewModel.Common
{
public class CheckConverter:IValueConverter
{
public object Convert(object value,Type targetType,object parameter,CultureInfo culture)
{
if(value==null || parameter==null)
{
return false;
}
string checkValue = value.ToString();
string targetValue = parameter.ToString();
bool r = checkValue.Equals(targetValue);
return r;
}
public object ConvertBack(object value,Type targetType,object parameer,CultureInof culture)
{
if(value==null||parameter==null)
{
return null;
}
if((bool)value)
{
return parameter.ToString();
}
return null;
}
}
}
在xaml处,需要先增加Converter的资源
<Window.Resources>
<c:CheckConverter x:Key="CheckConverter" />
</Window.Resources>
然后RadioButton代码修改如下
<RadioButton Grid.Row="2" Grid.Column="0" Content="男" IsChecked="{Binding Gender,Mode=TwoWay,Converter={StaticResource CheckConverter},ConverterParameter=1}" />
<RadioButton Grid.Row="2" Grid.Column="1" Content="女" IsChecked="{Binding Gender,Mode=TwoWay,Converter={StaticResource CheckConverter},ConverterParameter=2}"/>
ViewModel里增加的代码就没什么新意了:
/// <summary>
/// 性别
/// </summary>
public int Gender
{
get
{
return obj.Gender;
}
set
{
obj.Gender = value;
this.RaisePropertyChanged("Gender");
}
}
这样绑定以后,当Gender=2时,性别女的单选框会被选中;当性别男的单选框被选中后,Gender会变成1。