2013-08-01 4 views
7

स्लीवरलाइट ग्रुपनाम के साथ रेडियोधर्मी को समूह विकल्प प्रदान करता है जिसमें एकाधिक विकल्प से केवल एक विकल्प होता है।सिल्वरलाइट में समूह रेडियो बटन के लिए डेटा बाध्यकारी कैसे सेट करें?

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

तो वीएम में, मैं है केवल इस विकल्प के लिए एक संपत्ति है, यह MyChoice

public int MyChoice {get; set;} 

है तो कैसे सेटअप डेटा यूआई और वी एम के बीच इस मामले के लिए बाध्यकारी कहते हैं: यह की तरह है?

उत्तर

13

एक कनवर्टर प्रयुक्त किसी पूर्णांक पर bools कन्वर्ट करने के लिए :

Xaml पर, asssuming विकल्प आपकी MyChoice संपत्ति पर 1,2,3 पर मानचित्र :

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

इसके अलावा, आप आप ViewModel में INotifyPropertyChanged लागू करने के लिए बेहतर चाहते।

0

हाय आप प्रकार bool के तीन गुण बना सकते हैं और ViewModel 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> 

की IsChecked संपत्ति के लिए बाध्य करना होगा

 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; 
    } 
संबंधित मुद्दे