2017-04-12 71 views
0

我有一个场景,我为一组单选按钮保留了三个不同的属性是否有可能使它单一?拥有3个单选按钮的单个属性并没有正确更新

<RadioButton GroupName="os" IsChecked="{Binding Age} IsChecked="{Binding Name,Mode=TwoWay,Converter={StaticResource enumConverter},ConverterParameter=a}"/> 
<RadioButton GroupName="os" IsChecked="{Binding Age,Mode=TwoWay,Converter={StaticResource enumConverter},ConverterParameter=b}"/> 
<RadioButton GroupName="os" IsChecked="{Binding Age,Mode=TwoWay,Converter={StaticResource enumConverter},ConverterParameter=c}"/> 

在这里,我需要编写一个字符串转换,其中,我将经过转换器参数为A,B,C为各单选按钮。

public class EnumMatchToBooleanConverter : 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(); 
     //return checkValue.Equals(targetValue, 
     //   StringComparison.InvariantCultureIgnoreCase); 
     if (value.ToString() == "True" && (parameter.ToString() == "a" || parameter.ToString() == "b" || parameter.ToString() == "c")) 
     { 
      return true; 
     } 
     else 
      return false; 
    } 

    public object ConvertBack(object value, Type targetType, 
           object parameter, CultureInfo culture) 
    { 
     if (value == null || parameter == null) 
     return null; 

     //bool useValue = (bool)value; 
     //string targetValue = parameter.ToString(); 
     //if (useValue) 
     // return Enum.Parse(targetType, targetValue); 

     //return null; 

     if (value.ToString() == "True" && (parameter.ToString() == "b" || parameter.ToString() == "a" || parameter.ToString() == "c")) 
     { 
      return true; 
     } 
     else 
      return false; 

    } 
} 
+0

您是否尝试了我的建议或发生了什么? – mm8

回答

0

试试这个:

public class EnumMatchToBooleanConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == null || parameter == null) 
      return false; 

     return value.ToString() == parameter.ToString(); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     bool isChecked = (bool)value; 
     if (isChecked) 
      return parameter.ToString(); 

     return Binding.DoNothing; 

    } 
} 

您可能还需要考虑重新命名的转换器类,以更合适的东西。