2011-11-01 12 views
7

काम नहीं करता है यहाँ XAML है:ElementName साथ बाइंडिंग

<DataGrid Grid.Column="0" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding Path=Columns}" 
       x:Name="ColumnsGrid" RowHeaderWidth="0"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Width="*" Binding="{Binding Path=Header}" 
           Header="{Binding ElementName=ColumnsGrid, Path=DataContext.Count, StringFormat=Columns ({0}), diag:PresentationTraceSources.TraceLevel=High}"/> 
     </DataGrid.Columns> 
    </DataGrid> 

बाध्यकारी रिटर्न त्रुटि: System.Windows.Data त्रुटि: 2: FrameworkElement या FrameworkContentElement लक्ष्य तत्व के लिए शासी नहीं मिल सकी।

मुझे क्या याद आती है?

अद्यतन: http://blogs.msdn.com/b/jaimer/archive/2008/11/22/forwarding-the-datagrid-s-datacontext-to-its-columns.aspx

What is happening here? The Columns collection is just a property in the Datagrid; this collection is not in the logical (or visual) tree, therefore the DataContext is not being inherited, which leads to there being nothing to bind to.

अद्यतन 2: डेटा ग्रिड के चेतावनियां के बारे में अच्छा लेख:

यहाँ जवाब है http://blogs.msdn.com/b/vinsibal/archive/2009/04/07/5-random-gotchas-with-the-wpf-datagrid.aspx

+1

मुझे नहीं लगता कि 'ElementName' * एक ही तत्व के भीतर * काम करता है । – ChrisF

+0

यहां जवाब है: http://blogs.msdn.com/b/jaimer/archive/2008/11/22/forwarding-the-datagrid-s-datacontext-to-its-columns.aspx > क्या यहाँ हो रहा है? कॉलम संग्रह डाटाग्रिड में सिर्फ > एक संपत्ति है; यह संग्रह तार्किक (या दृश्य) > पेड़ में नहीं है, इसलिए डेटाकॉन्टेक्स्ट विरासत में नहीं मिला है, जिससे > बाइंड करने के लिए कुछ भी नहीं है। –

उत्तर

1

के लिए Header अब्द Visibility गुण DataGridColumn पर बाध्यकारी विशेष उपचार की जरूरत है ...

इस देखें ...

Bind datagrid column visibility MVVM

+0

में जोड़ा, हाँ यह मेरे लिए भी काम करता है। 'प्रॉक्सी एलिमेंट 'दृष्टिकोण एक बहुत अच्छा हैक है। :-) –

0

आप गणना में रुचि रखते हैं ऑब्जेक्ट की संपत्ति जिसे डेटाकॉन्टेक्स्ट में संदर्भित किया गया है आप कोशिश करते हैं और नियमित रूप से डेटा बाइंडिंग का उपयोग करें:

<DataGrid Grid.Column="0" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding Path=Columns}" 
      x:Name="ColumnsGrid" RowHeaderWidth="0"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Width="*" Binding="{Binding Path=Header}" 
          Header="{Binding Path=Count, StringFormat=Columns ({0}), diag:PresentationTraceSources.TraceLevel=High}"/> 
    </DataGrid.Columns> 
</DataGrid> 

संपादित

जाहिर the columns of a datagrid are not part of the Visual Tree तो ElementName और RelativeSource का उपयोग कर काम नहीं करेगा। शायद आपको उस वस्तु को संपत्ति जोड़नी चाहिए जिसमें कॉलम बाध्य है।

+0

मुझे डेटाग्रिड के डेटाकॉन्टेक्स्ट की आवश्यकता है। –

+0

@ voroninp - क्या आपने सापेक्ष स्रोत पूर्वजों को आजमाया था? –

+0

हां, –

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