2011-08-30 152 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

回答