Burada

2011-11-01 25 views
7

çalışmıyor XAML geçerli:Burada

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

Cilt döner hatası: System.Windows.Data hatası: 2: Hedef elemanı için FrameworkElement veya FrameworkContentElement yöneten bulunamıyor.

Neyi özlüyorum?

Güncelleme: 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.

Güncelleme 2: DataGrid'in uyarılar hakkında İyi madde: Burada

cevaptır http://blogs.msdn.com/b/vinsibal/archive/2009/04/07/5-random-gotchas-with-the-wpf-datagrid.aspx

+1

Ben ElementName' * Aynı öğesi içinde * çalışır 'sanmıyorum ...

bu göster ... özel bir işleme ihtiyaç . – ChrisF

+0

İşte cevap: http://blogs.msdn.com/b/jaimer/archive/2008/11/22/forwarding-the-datagrid-s-datacontext-to-its-columns.aspx > Ne nedir? burada mı oluyor? Kolonlar koleksiyonu sadece Datagrid'de bir > mülküdür; Bu koleksiyon mantıksal (veya görsel) > ağacında değil, bu nedenle DataContext'e miras alınmıyor, bu da > 'a bağlanacak hiçbir şey olmaması anlamına geliyor. –

cevap

1

Header abd Visibility özellikleri için DataGridColumn üzerine Bağlama

Bind datagrid column visibility MVVM

+0

Evet, bu benim için de işe yaradı. ProxyElement yaklaşımı çok iyi bir hack. :-) –

0

Eğer Kont ilgileniyorsanız DataContext'te başvurulan nesnenin özelliği Eğer denemek ve düzenli veri bağlama nasıl kullanılacağını:

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

DÜZENLEME

Görünüşe the columns of a datagrid are not part of the Visual Tree Yani çalışmaz elementName ve RelativeSource kullanarak. Belki de özelliği, sütunun bağlı olduğu nesneye eklemelisiniz.

+0

DataGrid DataContext'e ihtiyacım var. –

+0

@voroninp - RelativeSource Ances'ı denediniz mi? –

+0

Evet, –