DataGrid列扩展器内的标头绑定:扩展器折叠时找不到绑定源

时间:2013-10-07 09:20:47

标签: wpf wpfdatagrid

我有DataGrid,它有一个要根据属性显示/隐藏的列。我没有显示/隐藏列的运气,所以我们最终将列取出并将其放在单独的DataGrid中,并将第二个DataGrid放在Expander中。 第二个DataGrid的标题绑定了Expander的DataContext(或DataGrid - 相同的效果,也尝试将它绑定到包含usercontrol)。

            <Expander ExpandDirection="Right" Style="{DynamicResource ExpanderDirectionRight}" IsExpanded="{Binding ShowLaterDate}">
                <DataGrid AutoGenerateColumns="False" AlternationCount="2" SelectionMode="Single" ItemsSource="{Binding Rows, UpdateSourceTrigger=PropertyChanged}" CanUserDeleteRows="True" CanUserAddRows="False" CanUserResizeColumns="False" SnapsToDevicePixels="True" Visibility="{Binding Rows.HasContent, Converter={StaticResource BooleanToVisibilityConverter}}" HorizontalAlignment="Left" SelectedIndex="{Binding SelectedIndex, ElementName=BudgetDataGrid}">
                    <DataGrid.Columns>
                        <DataGridTemplateColumn CellTemplate="{StaticResource LaterDataTemplate}" Width="{StaticResource WidthOfValueColumns}">
                            <DataGridTemplateColumn.Header>
                                <Grid Margin="{StaticResource MarginOfTextBox}">
                                    <userControls:DateOrAgeEditor Date="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}}, Path=DataContext.LaterDate, UpdateSourceTrigger=LostFocus}" DateOfBirth="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}}, Path=DataContext.DateOfBirth}" TabIndex="11"/>
                                </Grid>
                            </DataGridTemplateColumn.Header>
                        </DataGridTemplateColumn>
                    </DataGrid.Columns>
                </DataGrid>
            </Expander>

这一切都很好。

问题: 显示usercontrol时显示绑定值。但是,如果Expander扩展了! 如果在显示用户控件时折叠扩展器,则会将其打印到输出:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Expander', AncestorLevel='1''. BindingExpression:Path=DataContext.DateOfBirth; DataItem=null; target element is 'DateOrAgeEditor' (Name='UserControl'); target property is 'DateOfBirth' (type 'DateTime')
System.Windows.Data Warning: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Expander', AncestorLevel='1''. BindingExpression:Path=DataContext.LaterDate; DataItem=null; target element is 'DateOrAgeEditor' (Name='UserControl'); target property is 'Date' (type 'DateTime')

当扩展器扩展后,绑定不会更新并继续“破坏”。

问题: 即使扩展器最初未扩展,如何正确绑定绑定?

1 个答案:

答案 0 :(得分:0)

刚刚找到了一种绑定我的列的可见性(http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/)的方法,然而这又重新引入了与扩展器相同的问题。但是很容易修复,只需对标题内容使用与可见性相同的绑定类型。