2012-12-20 19 views
18

मैं यह पता लगाने की कोशिश कर रहा हूं कि हेड्रेडकंटेंट कंट्रोल में आइटम ऐसी परियोजना में से आते हैं जो मेरा नहीं है। कोड यह रहा:DataContext = "{बाइंडिंग}" का क्या अर्थ है?

 <HeaderedContentControl 
      Content="{Binding Path=Workspaces}" 
      ContentTemplate="{StaticResource WorkspacesTemplate}" 
      Header="Workspaces" 
      Style="{StaticResource MainHCCStyle}" 
      DataContext="{Binding}" // <--- this 
     /> 

<DataTemplate x:Key="WorkspacesTemplate"> 
<TabControl 
    IsSynchronizedWithCurrentItem="True" 
    ItemsSource="{Binding}" 
    ItemTemplate="{StaticResource ClosableTabItemTemplate}" 
    Margin="4" 
    /> 

तो यह जांच करते हैं:

  1. ContentTemplate विशेषता बताता है कि कैसे आइटम desplayed कर रहे हैं।
  2. WorkspacesTemplate {बाइंडिंग} जिसका अर्थ है कि वह अपने DataContext संपत्ति (HeaderedContentControl की DataContext)
  3. तो मैं HeaderedContentControl के DataContext को देखने के लिए बाध्य कर रहा है के लिए ItemsSource के गुण सेट है, लेकिन यह के रूप में "{बाइंडिंग}" के साथ-साथ ...
  4. वर्णन किया गया है

इसका क्या अर्थ है?

उत्तर

24

अपने कोड के अधिक देखकर बिना यह निश्चित करना कठिन है, लेकिन DataContext="{Binding}", अक्सर अनावश्यक है के रूप में वर्तमान बंधन संदर्भ में किसी भी वस्तु स्वतः अपनी DataContext संपत्ति {Binding} के बराबर करने के लिए सेट करना होगा।

याद रखें:

  • Property="{Binding}" का अर्थ है "this.DataContext का मूल्यांकन किया जाता मूल्य के लिए this.Property सेट"
  • Property="{Binding Path=SubProperty}"
  • आदि

यह "this.DataContext.SubProperty का मूल्यांकन किया जाता मूल्य के लिए this.Property सेट" का मतलब इसका मतलब है कि DataContext="{Binding}" का अर्थ है "सेट this.DataContextthis.DataContext के मूल्यांकन मूल्य के लिए ", जो (ज्यादातर मामलों में) अनावश्यक है!

+3

मैं "ज्यादातर मामलों में" से चिंतित हूं। यह अनावश्यक नहीं है? – Grhm

+1

अपने आप पर * सुंदर * यकीन है कि यह हमेशा अनावश्यक है, लेकिन बाध्यकारी –

+1

के व्यवहार को बदलने के लिए कनवर्टर्स, अपडेट ट्रिगर्स इत्यादि शामिल करने के लिए कुछ वैध उपयोग मामले हैं। सबसे सामान्य उपयोग डेटा कॉन्टेक्स्ट को नियंत्रण पर रीसेट करना है जिसने अपने माता-पिता से मूल मूल्य पर एक ओवर्रिडेन डेटाकॉन्टेक्स्ट विरासत में प्राप्त किया है। –

3

{Binding} कुछ ऐसा 'या' वर्तमान डेटा संदर्भ - माता-पिता से असाइन या विरासत में बांधने जैसा कुछ है। बेहतर समझने के लिए, {Binding} के बराबर {Binding .} या {Binding Path=.}

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

  • कोई संबंधित समस्या नहीं^_^