Связывание WPF по ElementName внутри страницы фрейма - PullRequest
0 голосов
/ 04 февраля 2020

У меня следующая ситуация: у меня приложение с одним окном, которое позволяет пользователям переключаться между несколькими вкладками. Контент реализован с использованием Frame и Pages. На некоторых страницах есть DataGrids, которые имеют собственные заголовки столбцов.

Page.xaml

<DataGrid x:Name="dataGridAircrafts"
              ItemsSource="{Binding Aircrafts.Result}"
              AutoGenerateColumns="False"
              IsReadOnly="True"
              Grid.Row="0"
              CanUserResizeRows="False"
              SelectionMode="Single"
              HorizontalScrollBarVisibility="Visible">
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="columnRegistrationDataGridAircrafts"
                                Binding="{Binding Registration}"
                                CanUserSort="False">
                <DataGridTextColumn.Header>
                    <controls:NoSearchColumnHeaderControl 
                        Text="Registration"
                        Column="{Binding ElementName=columnRegistrationDataGridAircrafts}"
                        DataGrid="{Binding ElementName=dataGridAircrafts}"/>
                </DataGridTextColumn.Header>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>

NoSearchColumnHeaderControl.xaml.cs

public DataGridTextColumn Column
    {
        get { return (DataGridTextColumn)GetValue(ColumnProperty); }
        set { SetValue(ColumnProperty, value); }
    }

    public static DependencyProperty ColumnProperty =
       DependencyProperty.Register("Column", typeof(DataGridTextColumn), typeof(AbstractColumnHeaderControl));

    public DataGrid DataGrid
    {
        get { return (DataGrid)GetValue(DataGridProperty); }
        set { SetValue(DataGridProperty, value); }
    }



    public static DependencyProperty DataGridProperty =
       DependencyProperty.Register("DataGrid", typeof(DataGrid), typeof(AbstractColumnHeaderControl));

Это прекрасно работает на странице, загруженной первым в рамку. Однако на каждой другой странице привязки имеют значение null

(Ошибка: не удается найти источник для привязки со ссылкой «ElementName = dataGridAircrafts». BindingExpression: Path = Items; DataItem = null; целевой элемент равен ' NoSearchColumnHeaderControl '(Name =' columnHeader '); целевым свойством является' DataGrid '(тип' DataGrid ')).

Это определенно связано с использованием фрейма / страницы, поскольку при запуске с другой страницей по умолчанию, тогда Привязка на этой странице работает, но не на других (включая ту, которая ранее работала). Если я начну со страницы, где нет DataGrid, то ни на одной из страниц не будет правильной привязки для этих DataGrids.

Может кто-нибудь объяснить мне, как я могу это исправить?

...