【问题标题】:Binding with ElementName does not work与 ElementName 绑定不起作用
【发布时间】:2011-11-01 09:09:48
【问题描述】:

这是 XAML:

<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

这里发生了什么? Columns 集合只是一个属性 在数据网格中;此集合不在逻辑(或视觉)中 树,因此 DataContext 没有被继承,这导致 没有什么可以绑定的。

更新 2: 关于 DataGrid 警告的好文章:http://blogs.msdn.com/b/vinsibal/archive/2009/04/07/5-random-gotchas-with-the-wpf-datagrid.aspx

【问题讨论】:

  • 我不认为ElementName 同一个元素中起作用。
  • 这是答案:blogs.msdn.com/b/jaimer/archive/2008/11/22/… > 这里发生了什么? Columns 集合只是 Datagrid 中的一个属性 >;此集合不在逻辑(或视觉)> 树中,因此 DataContext 没有被继承,这导致 > 没有可绑定的内容。
  • 又一个有趣的错误证明了 WPF 唯一的优点就是编写教程,这项技术快把我逼疯了。

标签: wpf binding


【解决方案1】:

DataGridColumn 上绑定Header abd Visibility 属性需要特殊处理...

看到这个...

Bind datagrid column visibility MVVM

【讨论】:

  • 是的,这对我也有用。 ProxyElement 方法是一个非常好的技巧。 :-)
【解决方案2】:

如果您对 DataContext 中引用的对象的 Count 属性感兴趣,请尝试使用常规数据绑定:

<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 将不起作用。 也许您应该将属性添加到列绑定到的对象中。

【讨论】:

  • 我需要DataGrid的DataContext。
  • @voroninp - 你尝试过 RelativeSource Ancestor 吗?
  • @voroninp - 我添加到我的答案中
猜你喜欢
  • 2011-12-23
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
相关资源
最近更新 更多