2011-11-01 75 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: 約DataGrid的告誡好文章: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 >什麼在這裏發生? Columns集合只是Datagrid中的一個屬性 >;這個集合不在邏輯(或可視化)樹中,因此DataContext沒有被繼承,這導致沒有任何東西需要綁定。 –

回答

1

綁定上DataGridColumnHeader ABD Visibility性質需要特殊處理...

看到這個...

Bind datagrid column visibility MVVM

+0

是的,這也適用於我。 'ProxyElement'方法是一個很好的入侵。 :-) – 2011-11-01 10:52:28

0

如果你有興趣在計數DataContext中引用的對象的屬性您嘗試使用常規數據綁定:

<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

我需要DataGrid的DataContext。 –

+0

@voroninp - 你有沒有嘗試RelativeSource先祖? –

+0

是的,沒有幫助 –