2013-08-01 14 views
7

Sliverlight bietet Radio-Button mit GroupName zu gruppieren Radiobutton zusammen mit nur einer Option aus mehreren Wahl. Es ist wie:Wie Einrichten der Datenbindung für Gruppenknopf in Silverlight?

<RadioButton GroupName="Option" Content="Option 1"></RadioButton> 
<RadioButton GroupName="Option" Content="Option 2"></RadioButton> 
<RadioButton GroupName="Option" Content="Option 3"></RadioButton> 

dann in VM, habe ich nur eine Eigenschaft für diese Option, sagen Sie es MyChoice ist

public int MyChoice {get; set;} 

dann, wie Setup-Daten für diesen Fall zwischen UI und VM-Bindung?

Antwort

13

verwendet, um einen Konverter bools in einen int zu konvertieren :

Auf Xaml, assassuming Optionen zu 1,2,3 auf Ihre MyChoice Eigenschaft zuordnen :

<RadioButton GroupName="Option" Content="Option 1" 
       IsChecked="{Binding Path=MyChoice, Converter={StaticResource RadioButtonToIntConverter}, 
     ConverterParameter=1}"/> 
    <RadioButton GroupName="Option" Content="Option 2" 
       IsChecked="{Binding Path=MyChoice, Converter={StaticResource RadioButtonToIntConverter}, 
     ConverterParameter=2}"/> 
    <RadioButton GroupName="Option" Content="Option 3" 
       IsChecked="{Binding Path=MyChoice, Converter={StaticResource RadioButtonToIntConverter}, 
     ConverterParameter=3}"/> 

Im Konverter Feststellung, dass ich keinen Gussschutz hinzugefügt haben:

public class RadioButtonToIntConverter:IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var para = System.Convert.ToInt32(parameter); 
     var myChoice = System.Convert.ToInt32(value); 
     return para == myChoice; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var para = System.Convert.ToInt32(parameter); 
     var isChecked = System.Convert.ToBoolean(value); 
     return isChecked ? para : Binding.DoNothing; 
    } 
} 

Auch ist besser, INotifyPropertyChanged in Ihnen Ansichtsmodell zu implementieren.

0

Hallo Sie drei Eigenschaften vom Typ Bool zu schaffen haben und binden an IsChecked Eigenschaft RadioButton-

<StackPanel> 
     <RadioButton GroupName="Option" Content="Option 1" IsChecked="{Binding MyChoice1}"></RadioButton> 
     <RadioButton GroupName="Option" Content="Option 2" IsChecked="{Binding MyChoice2}"></RadioButton> 
     <RadioButton GroupName="Option" Content="Option 3" IsChecked="{Binding MyChoice3}"></RadioButton> 
    </StackPanel> 

Ansichtsmodell

 public class ViewModel:INotifyPropertyChanged 
    { 
     bool myChoice1; 

     public bool MyChoice1 
     { 
      get { return myChoice1; } 
      set { 
       myChoice1 = value; 
       Notify("MyChoice1"); 
      } 
     } 
     bool myChoice2; 

     public bool MyChoice2 
     { 
      get { return myChoice2; } 
      set 
      { 
       myChoice2 = value; 
       Notify("MyChoice2"); 
      } 
     } 
     bool myChoice3; 

     public bool MyChoice3 
     { 
      get { return myChoice3; } 
      set 
      { 
       myChoice3 = value; 
       Notify("MyChoice3"); 
      } 
     } 

     public void Notify(string propName) 
     { 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs(propName)); 

     } 
     public event PropertyChangedEventHandler PropertyChanged; 
    }