2011-08-30 119 views
0

我正在使用this作为我当前需要的源代码。 它工作正常,但我可以选择我的单选按钮只有一次。这里是我的代码:绑定单选按钮以枚举silverlight

<StackPanel Orientation="Vertical" Grid.Column="0" > 
    <sdk:Label Content="Materiale:" Margin="0,0,0,5" /> 
    <RadioButton GroupName="Materiale" Margin="0,0,0,2" 
        Content="All" 
        IsChecked="{Binding Path=Materiale, 
           Mode=TwoWay, 
           Converter={StaticResource EnumToVisibilityConverter}, 
           ConverterParameter=All}" 
        Command="{Binding CambioMaterialeCommand}" /> 
    <RadioButton GroupName="Materiale" Margin="0,0,0,2" 
        Content="RotabiliSingoli" 
        IsChecked="{Binding Path=Materiale, 
           Mode=TwoWay, 
           Converter={StaticResource EnumToVisibilityConverter}, 
           ConverterParameter=RotabiliSingoli}" 
        Command="{Binding CambioMaterialeCommand}" /> 
    <RadioButton GroupName="Materiale" Margin="0,0,0,2" 
        Content="Treni" 
        IsChecked="{Binding Path=Materiale, 
           Mode=TwoWay, 
           Converter={StaticResource EnumToVisibilityConverter}, 
           ConverterParameter=Treni}" 
        Command="{Binding CambioMaterialeCommand}" /> 
    <RadioButton GroupName="Materiale" Margin="0,0,0,2" 
        Content="CarrozzeLocomotive" 
        IsChecked="{Binding Path=Materiale, 
           Mode=TwoWay, 
           Converter={StaticResource EnumToVisibilityConverter}, 
           ConverterParameter=CarrozzeLocomotive}" 
        Command="{Binding CambioMaterialeCommand}"/> 
</StackPanel> 

在视图模型,我有:

public void CambioMateriale() 
     { 
      switch (Materiale) 
      { 
       case E_Materiale.All: 
        IsVisibleLocomotivaCarozza = false; 
        IsVisibleTrenoPartenza = false; 
        break; 
       case E_Materiale.RotabiliSingoli: 
        IsVisibleLocomotivaCarozza = false; 
        IsVisibleTrenoPartenza = false; 
        break; 
       case E_Materiale.Treni: 
        IsVisibleLocomotivaCarozza = false; 
        IsVisibleTrenoPartenza = true; 
        break; 
       case E_Materiale.CarrozzeLocomotive: 
        IsVisibleLocomotivaCarozza = true; 
        IsVisibleTrenoPartenza = false; 
        break; 
      } 

     } 

当把一个断点的开关上,我可以看到一个单选按钮去到另一个时Materiale值发生变化,但如果我尝试重新选择一个已经选择的单选按钮,则该值不会更改并保持之前选定的单选按钮值。

有人能解释我发生了什么事吗?

感谢您的帮助,

[编辑]

这里是我的枚举器:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     string parameterString = parameter as string; 
     if (parameterString == null) 
      return DependencyProperty.UnsetValue; 

     if (Enum.IsDefined(value.GetType(), value) == false) 
      return DependencyProperty.UnsetValue; 

     object parameterValue = Enum.Parse(value.GetType(), parameterString, true); 

     return parameterValue.Equals(value); 
    } 


    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value.Equals(true) ? parameter : DependencyProperty.UnsetValue; 
    } 

[/编辑]

+0

如果我理解这个问题,你可以问为什么当你不改变选择的单选按钮(重新选择allready selected)时值不会改变? ......我想我明白你错了,你能解释一下吗? – Carsten

+0

不,我选择无线电A并获得A值,选择无线电B并获得B,但是如果我重新选择无线电A,我仍然有B。此时只应选择一个单选按钮。它更清楚吗? – Arthis

+0

发现它是转换器没有正常工作。 – Arthis

回答