2013-08-01 4 views
7

Sliverlight предоставляет переключатель с GroupName, чтобы группировать радиообъект вместе с одним вариантом из нескольких вариантов. Это как:Как настроить привязку данных для группового переключателя в Silverlight?

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

затем в VM, я только одно свойство для этого параметра, скажем, это MyChoice

public int MyChoice {get; set;} 

тогда как данные настройки привязки для этого случая между UI и VM?

ответ

13

Используется конвертер для преобразования Bools к междунар :

На Xaml, варианты опций сопоставляются с 1,2,3 по вашему свойству MyChoice :

<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}"/> 

В преобразователе, отметив, что я не добавил никакой защиты произнесения:

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; 
    } 
} 

Кроме того, вы бы лучше реализовать INotifyPropertyChanged в вас ViewModel.

0

Привет вам придется создать три свойства типа BOOL и связываются с IsChecked свойством 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> 

ViewModel

 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; 
    }