我在silverlight中有一个复选框,我已经将复选框IsChecked属性绑定了一个字符串属性,该属性存储的值类似于' True'并且'错误'。我在绑定中使用了转换器将字符串值转换为bool。我还有复选框的事件处理程序'已检查'并且“未选中”'事件。
当我选中或取消选中复选框时,绑定更新以及复选框的处理程序'''''并且“未选中”'调用event,但先调用hanlder然后再绑定更新。但我要求复选框首先更新绑定(对于IsChecked属性),然后调用事件hanlder。我怎样才能做到这一点。
//我绑定的属性IsChecked属性是' PropertyPath'
// binding code
CheckBox checkBoxControl = new CheckBox();
Binding binding = new Binding();
binding.FallbackValue = false;
binding.Mode = BindingMode.TwoWay;
binding.Source = this;
binding.Converter = new BoolStringToBoolConverter();
binding.Path = new PropertyPath("PropertyPath");
checkBoxControl.SetBinding(GenericCheckBox.IsCheckedProperty, binding);
checkBoxControl.Checked += new RoutedEventHandler(checkBox_CheckedProperty_Changed);
handler
void checkBox_CheckedProperty_Changed(object sender, RoutedEventArgs e)
{
CheckBox chkBox = sender as CheckBox;
// Here the value of 'PropertyPath' is not updated as binding is not updated yet
}
下面是我在绑定中使用的转换器
public class BoolStringToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null && value.ToString().ToUpper().Trim().Equals("TRUE"))
{
return true;
}
else
{
return false;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null && value.GetType().Equals(typeof(bool)) && (bool)value)
{
return "True";
}
else
{
return "False" ;
}
}
}
点击复选框后,首先调用事件处理程序,然后转换“转换后”#39;转换器的方法被调用,因此在事件处理程序中我没有得到属性的更新值' PropertyPath'。
如何在调用复选框事件处理程序之前确保调用绑定更新。