2013-08-26 4 views
5

मैंने एक रेडियो बटन पर एक बुलियन मूल्य को बांधने के तरीके पर कई पोस्ट देखीं। लेकिन मेरा परिदृश्य यह है कि मुझे इसे रेडियो बटन से बांधना होगा और उपयोगकर्ता से चयन पढ़ना होगा।बूल Xaml रेडियो बटन बूलियन

कोई विकल्प नहीं चुना जाना चाहिए।

यदि मैं इसे एक बूलियन से बांधता हूं, चूंकि बूलियन नल हो सकता है तो यह रेडियो बटन में चयनित डिफ़ॉल्ट मान दिखाता है।

यदि मैं निरर्थक बूलियन का उपयोग करता हूं, तो कनवर्टर का उपयोग करने की कोशिश करते समय भी मैं झूठी चूक करता हूं।

मैं xaml में ऑनवे मोड का उपयोग नहीं कर सकता क्योंकि मुझे यह जांचने की आवश्यकता है कि क्या रेडियो बटन चयन किया गया था जो मैं बाध्य चर का उपयोग कर रहा हूं।

चींटी पॉइंटर्स इसे कैसे प्राप्त करें?

+0

यदि यह एक बूलियन है तो आप रेडियो बटन से जुड़ना क्यों चाहते हैं? एक चेक बॉक्स बेहतर नहीं होगा? – ChrisF

+0

मुझे चेकबॉक्स माना जाता है लेकिन क्या यह मुझे एक ही प्रोब नहीं देगा ?? चयनित एक बुलियन से बंधे हैं और कनवर्टर का उपयोग करने के समान समस्या होगी ?? –

+0

नहीं। जब बुलियन झूठा है चेक बॉक्स खाली है। जब यह सच हो जाता है। आप इसे एक बेकार बूलियन से भी बांध सकते हैं और इसे चेक बॉक्स की तीसरी अनिश्चित स्थिति के रूप में कर सकते हैं। आप यहां क्या हासिल करने की कोशिश कर रहे हैं? यह बूलियन क्या दर्शाता है? – ChrisF

उत्तर

5

आप अपने रेडियो बटन पर एक नालीदार बुलियन बांध सकते हैं, लेकिन आपको इसे कनवर्टर के माध्यम से करने की आवश्यकता है।

सबसे पहले अपने चर घोषित:

private bool? answer; 
public bool? Answer 
{ 
    get { return answer; } 
    set 
    { 
     answer = value; 
     if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Answer")); 
    } 
} 

और null करने के लिए इसे आरंभ।

<Window.Resources> 
    <local:BooleanConverter x:Key="BooleanConverter"/> 
</Window.Resources> 

<StackPanel Grid.Row="1"> 
    <RadioButton Content="I Agree" 
       IsChecked="{Binding Answer, 
          Converter={StaticResource BooleanConverter}, 
          ConverterParameter='true', Mode=TwoWay}" /> 
    <RadioButton Content="I Disagree" 
       IsChecked="{Binding Answer, 
          Converter={StaticResource BooleanConverter}, 
          ConverterParameter='false', Mode=TwoWay}" /> 
</StackPanel> 

और अंत में अपने कनवर्टर:

class BooleanConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var test = (bool?)value; 
     var result = bool.Parse((string)parameter); 

     if (test == result) 
     { 
      return true; 
     } 

     return false; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var result = bool.Parse((string)parameter); 
     return result; 
    } 
} 

यह Answer रेडियो बटन बांधता है और कहा गया है कि पहले एक ही जब मूल्य true है की जाँच की जाएगी

फिर XAML में

और दूसरा जवाब दिया जाएगा जब उत्तर false है। फिर आप उपयोगकर्ता को आगे बढ़ने से पहले Answer शून्य नहीं कर सकते हैं।

+0

धन्यवाद करने का बेहतर तरीका है ... मैं वही चीज़ का उपयोग कर रहा हूं, लेकिन मेरे विचार को लोड करने से पहले किसी कारण से बुलियन झूठ पर सेट हो रहे हैं। मैंने सोचा कि यह कनवर्टर की वजह से था। मैं जांचता हूं कि क्या हो रहा है और –

+1

@ashishg वापस प्राप्त करें - सुनिश्चित करें कि आप निरंतर बुलियन को कन्स्ट्रक्टर में स्पष्ट रूप से 'शून्य' पर सेट करें। – ChrisF

+0

यह काम करता है .. समस्या यह थी कि मैं वही वैरिएबल नामों का उपयोग कर रहा था क्योंकि दूसरों को कहीं परिभाषित किया गया था लेकिन यहां उपलब्ध है और जब भी दृश्य लोड होता है तो यह अपडेट हो रहा था। –

0

यह ऐसा करने का सबसे अच्छा तरीका नहीं हो सकता है, लेकिन आप इस तरह के कुछ का उपयोग कर सकते हैं: checkbox like radiobutton wpf c# और केवल दो नियंत्रण हैं।

मुझे सराहना है कि यह सबसे अच्छा नहीं है, लेकिन आपके उत्तर को पढ़ने से यह आपको वही देता है जो आप चाहते हैं (आमतौर पर)।

+0

मैंने इस घटना को चेक/अनचेक पर ट्रिगर करने के बारे में सोचा और इसे किया लेकिन हां माना जाता है कि यह एक अच्छा समाधान नहीं होगा और यह देखने के लिए यहां पोस्ट किया गया है कि –

संबंधित मुद्दे