首页 > 解决方案 > 在嵌套样式/DataGrid DataTemplates 中找不到参考绑定源

问题描述

我有一个Control( ZlsUnitBrowserActive) 和两个DependencyProperties MaxWidthIdentifier/ PropertiesDataTemplate。尝试将这两个属性绑定在以下位置时,我被卡住了Style

System.Windows.Data 错误:4:找不到与引用“RelativeSource FindAncestor,AncestorType='PlcFramework.Zls.Production.ProductionControls.ZlsUnitBrowserActive',AncestorLevel='1''的绑定源。BindingExpression:Path=PropertiesDataTemplate; 数据项=空;目标元素是“DataGridTemplateColumn”(HashCode=30225241);目标属性是“CellTemplate”(类型“DataTemplate”)

<Style TargetType="productionControls:ZlsUnitBrowserActive">
    <Style.Setters>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="productionControls:ZlsUnitBrowserActive">
                    <DataGrid>
                        <DataGrid.Columns>
                            <DataGridTemplateColumn>
                                <DataGridTemplateColumn.CellTemplate 
                                    MaxWidth="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=productionControls:ZlsUnitBrowserActive}, Path=MaxWidthIdentifier}"
                                    CellTemplate="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=productionControls:ZlsUnitBrowserActive}, Path=PropertiesDataTemplate}"/>
                            </DataGridTemplateColumn>
                        </DataGrid.Columns>
                    </DataGrid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style.Setters>
</Style>

有什么特别的技巧吗?也尝试通过缓存ZlsUnitBrowserActive实例DataGrid.Tag(见帖子:https ://stackoverflow.com/a/3668699/6229375 ),但没有成功。

标签: wpfxamldata-binding

解决方案


不能DataGridColumn使用 a 将 a 的属性绑定到可视祖先的RelativeSource原因是列本身不是可视树的一部分,因此它没有要绑定的祖先。

尽管该DataGrid控件是可视树的一部分,但“BindingProxy”可用于绑定和“捕获” a ,DataContext例如使用RelativeSource.DataGrid

Thomas Levesque 写了一篇博文详细解释了这一点:https ://thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited /


推荐阅读