2010-09-20 12 views
7

मैंने निम्न विंडो के DataContext को इस व्यवहार को प्रदर्शित करने के लिए मुझे एक एमवीवीएम style देने के लिए पीछे दिए गए कोड में DataContext को बाध्य किया है:डब्ल्यूपीएफ रेडियो बटन - एमवीवीएम - बाध्यकारी मरने लगता है?

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300" 
     DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
    <StackPanel> 
     <RadioButton GroupName="test" Content="Monkey" IsChecked="{Binding IsMonkey}"/> 
     <RadioButton GroupName="test" Content="Turtle" IsChecked="{Binding IsTurtle}" /> 
    </StackPanel> 
</Window> 

पीछे कोड है:

public partial class Window1 
{ 
    public Window1() 
    { 
     InitializeComponent(); 
    } 

    private bool _isMonkey; 
    public bool IsMonkey 
    { 
     get { return _isMonkey; } 
     set 
     { 
      _isMonkey = value; 
     } 
    } 

    private bool _isTurtle; 
    public bool IsTurtle 
    { 
     get { return _isTurtle; } 
     set 
     { 
      _isTurtle = value; 
     } 
    } 
} 

पर ब्रेकपॉइंट डालना IsMonkey और IsTurtle का सेट और फिर एक दूसरे के बाद IsMonkey और IsTurtle का चयन करना और मुझे लगता है कि यह प्रत्येक नियंत्रण के पहले चयन के लिए काम करता है, दूसरे चयन पर बाध्यकारी ब्रेक और ब्रेकपॉइंट्स अब ट्रिगर नहीं किए जाते हैं?

क्या कोई मुझे सही दिशा में इंगित कर सकता है, कृपया?

उत्तर

10

आपके उदाहरण में कोई बदलाव नहीं हुआ है। आपने लिखा है कि यह एक एमवीवीएम-शैली निर्माण के लिए केवल एक उदाहरण है। इसलिए मुझे लगता है कि आपने INotifyPropertyChanged लागू किया है या गुण निर्भरता प्रॉपर्टीज हैं। यदि नहीं, तो आपको सबसे पहले जो करना है वह परिवर्तन-अधिसूचना है।

आप परिवर्तन अधिसूचना है, तो radiobuttons विभिन्न समूहों के नाम (प्रत्येक उदाहरण के लिए एक और नाम) दे। यह उन्हें decouples और बाध्यकारी अब तोड़ा नहीं जाएगा।

<StackPanel> 
    <RadioButton GroupName="test1" Content="Monkey" IsChecked="{Binding IsMonkey}"/> 
    <RadioButton GroupName="test2" Content="Turtle" IsChecked="{Binding IsTurtle}" /> 
</StackPanel> 

अपने गुण की घोषणा पर निर्भर करता है, यह भी बाध्यकारी TwoWay घोषित करने के लिए meaningfull हो सकता है।

IsChecked="{Binding IsMonkey,Mode=TwoWay} 

आशा है कि इससे मदद मिलेगी।

+0

हाय, धन्यवाद - यह आपके द्वारा सुझाए गए विभिन्न समूह नामों के माध्यम से काम करता है और गुणों पर कुछ कोड। हालांकि यह कष्टप्रद है, क्योंकि यह वही समूह है - इसलिए मैं उस कार्यक्षमता का उपयोग करना चाहता था, लेकिन यह मुझे नहीं देगा। –

+0

'रेडियोबूटन को विभिन्न समूह नाम दें' मेरे भगवान, आपने मेरा बट बचा लिया। – user1112008

2

यह डब्ल्यूपीएफ रेडियो बटन के साथ एक ज्ञात मुद्दा है; अधिक जानकारी और समाधान के लिए इन पदों की जाँच -

WPF radiobuttons और डेटा बाइंडिंग: http://geekswithblogs.net/claraoscura/archive/2008/10/17/125901.aspx

बचत WPF रेडियो बटन बाध्यकारी (Enums और बग फिक्स): http://inquisitorjax.blogspot.com/2009/02/wpf-radio-button-binding-enums-and-bug.html

RadioButton अनियंत्रित बाइंडिंग समस्या अभी भी हल नहीं किया? http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/8eb8280a-19c4-4502-8260-f74633a9e2f2/

+0

जानकारी के लिए धन्यवाद। –

0

यह समस्या WPF 4.0 में तय की गई है, मैं इस व्यवहार को अभी अपने स्वयं के प्रोजेक्ट में ले रहा हूं। बस रेडियो बटन को एक ही समूह में रखें, अब अलग-अलग समूह नामों का उपयोग करने की आवश्यकता नहीं है। बाइंडिंग टूटा नहीं जाएगा ... असल में "डी-चयनित" रेडियो बटन के मुकाबले इसके बाध्य मूल्य को झूठ पर सेट किया जाएगा।

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