Привязка заголовка столбца DataGrid внутри расширителя: источник привязки не найден при свернутом расширителе

У меня есть DataGrid, который имеет столбец, который должен быть показан / скрыт в зависимости от свойства. Мне не повезло в показе / скрытии столбца, поэтому мы в итоге вынули столбец, поместили его в отдельную DataGrid и поместили вторую DataGrid внутри Expander. Заголовок второй DataGrid связан с DataContext Expander (или 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>

Это все хорошо, хорошо.

Проблема: Связанное значение отображается при отображении пользовательского контроля. НО ТОЛЬКО если расширитель расширен! Если Expander свернут, когда отображается usercontrol, он печатается для вывода:

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 ответ

Решение

Только что нашел способ связать видимость моей колонки ( http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/) это, однако, вновь ввело ту же проблему, что и расширитель. Но это легко исправить, просто используйте тот же тип привязки для содержимого заголовка, что и для видимости.

Другие вопросы по тегам