2015-05-20 4 views
7

MSDN के रूप में कहते हैं:इस प्रकार के बाध्यकारी का अजीब व्यवहार क्यों है?

वैकल्पिक रूप से, एक अवधि के पथ वर्तमान स्रोत के लिए बाध्य करने के लिए इस्तेमाल किया जा सकता (।)। उदाहरण के लिए, टेक्स्ट = "{बाइंडिंग}" टेक्स्ट = "{बाध्यकारी पथ =।}" के बराबर है।

पहले::

"दो-तरफा बंधन की आवश्यकता है: संदेश के साथ

<StackPanel> 
    <TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/> 
    <Grid DataContext="{Binding Path=MyString}"> 
     <TextBox Text="{Binding}"></TextBox> 
    </Grid> 
    </StackPanel> 

इस उदाहरण उठाने के अपवाद

लेकिन मैं नीचे दो उदाहरण में अलग व्यवहार का सामना करना पड़ पथ या XPath। "

दूसरा:

<StackPanel> 
    <TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/> 
    <Grid DataContext="{Binding Path=MyString}"> 
     <TextBox Text="{Binding Path=.}"></TextBox> 
    </Grid> 
    </StackPanel> 

और इस उदाहरण को ठीक से चलाने के लिए और पहले पाठ बॉक्स पाठ परिवर्तन ViewModel को परिलक्षित और पहले पाठ बॉक्स का पाठ भी बदल लेकिन जब दूसरी पाठ बॉक्स का पाठ बदला गया है कि ViewModel को परिलक्षित नहीं (या पहले पाठ बॉक्स)!

प्रश्न: मैं इस दो परिदृश्य को समझाता हूं?

नोटिस:

धन्यवाद: माता-पिता नियंत्रण (विंडो) की तरह की DataContext एक सूचनीय संपत्ति MyString के साथ एक सरल वर्ग है।

+1

दूसरा पाठ बॉक्स * में पाठ का संपादन पाठ बॉक्स के DataContext में स्ट्रिंग उदाहरण बदलता है *:

यहाँ एक रिश्तेदार विषय है। यह किसी भी संपत्ति को अद्यतन नहीं करता है। – Clemens

+0

@ क्लेमेन, "डेटा कॉन्टेक्स्ट में स्ट्रिंग इंस्टेंस" MyString है, तो यह क्यों अपडेट नहीं हुआ? –

+0

एक मामले में बाध्यकारी त्रुटि के लिए, लेकिन दूसरे नहीं: टेक्स्ट प्रॉपर्टी डिफ़ॉल्ट रूप से दो-तरफ बांधती है, और स्पष्ट रूप से बाइंडिंग क्लास जांचता है कि पथ की संपत्ति दो-तरफा होने पर सेट की जाती है या नहीं। ऐसा लगता है कि यह जांच नहीं करता है कि पथ किसी संपत्ति या केवल स्रोत ऑब्जेक्ट को दर्शाता है या नहीं। – Clemens

उत्तर

0

जब भी दो तरह बाध्यकारी होता है {बाइंडिंग पथ =।} आवश्यक है। कोड को बदलने की कोशिश करें:

<StackPanel> 
      <TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/> 
      <Grid DataContext="{Binding Path=MyString}"> 
       <!--<TextBox Text="{Binding}"></TextBox>--> 
       <Label Content="{Binding}"/> 
      </Grid> 
     </StackPanel> 

और यह ठीक काम करता है। बाध्यकारी तरीके से मूल कोड पर भी काम करता है।

Are "{Binding Path=.}" and "{Binding}" really equal

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