2011-11-01 13 views
7

Ecco il codice XAML:Binding con ElementName non funziona

<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> 

Binding restituisce errore: Errore System.Windows.Data: 2: Impossibile trovare governare FrameworkElement o FrameworkContentElement per elemento di destinazione.

Cosa mi manca?

Aggiornamento:

ecco la risposta: 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.

Aggiornamento 2: buon articolo su caveat del DataGrid: http://blogs.msdn.com/b/vinsibal/archive/2009/04/07/5-random-gotchas-with-the-wpf-datagrid.aspx

+1

Non credo 'ElementName' funziona * all'interno dello stesso elemento * . – ChrisF

+0

Questa è la risposta: http://blogs.msdn.com/b/jaimer/archive/2008/11/22/forwarding-the-datagrid-s-datacontext-to-its-columns.aspx > Cosa sta succedendo qui? La collezione Columns è solo una proprietà > nel Datagrid; questa raccolta non è nella struttura logica (o visiva) >, quindi DataContext non viene ereditato, il che porta a > non essendoci nulla da associare. –

risposta

1

Legatura in brossura con DataGridColumn per Header abd Visibility proprietà ha bisogno di un trattamento speciale ...

vedere questo ...

Bind datagrid column visibility MVVM

+0

Sì, questo ha funzionato anche per me. L'approccio 'ProxyElement' è un ottimo compromesso. :-) –

0

Se siete interessati a Conte proprietà dell'oggetto a cui si fa riferimento in DataContext si cerca di utilizzare l'associazione dati regolare:

<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> 

EDIT

Apparentemente the columns of a datagrid are not part of the Visual Tree Quindi, utilizzando ElementName e RelativeSource non funzionerà. Forse dovresti aggiungere la proprietà all'oggetto a cui è associata la colonna.

+0

Ho bisogno del DataContext di DataGrid. –

+0

@voroninp - Hai provato l'antenato RelativeSource? –

+0

Sì, non ha aiutato né –

Problemi correlati