У меня, похоже, возникают проблемы с попыткой связать столбец заголовка DataGridTextColumn. Этот код отлично работает, когда у меня нет TabControl/TabItem, который обертывает его, но когда я помещаю его в TabControl, он больше не может найти DayHeader. Я предполагаю, что это проблема с FindAncestor/AncestoryType, но я не уверен, что делать, чтобы исправить это, или если это действительно проблема. Любая помощь будет оценена по достоинству.Ошибка привязки заголовка DataGridTextColumn в TabItem/TabControl
<!--Not Working
<TabControl Margin="0,25,0,0" Background="{x:Null}">
<TabItem >
<Grid >
<DataGrid></DataGrid>
</Grid>
</TabItem>
<TabItem Header="Test Header">-->
<!--Working-->
<Grid>
<DataGrid ItemsSource="{Binding RunningViewSource.View}" Margin="0,27,0,-5" SelectionMode="Single">
<DataGrid.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel VirtualizingStackPanel.VirtualizationMode="Recycling" />
</ItemsPanelTemplate>
</DataGrid.ItemsPanel>
<DataGrid.Columns>
<DataGridTextColumn Header="Contingencies" Binding="{Binding Contingencies}"
IsReadOnly="True" Width="400" />
<DataGridTextColumn Binding="{Binding Days[4]}" CellStyle="{StaticResource NumberCell}">
<DataGridTextColumn.Header>
<TextBlock Text="{Binding DataContext.DayHeader, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}">
</TextBlock>
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
<!--Not Working
</TabItem>
</TabControl>-->
Это сообщение, которое я получаю в окне вывода, если я добавляю нерабочие части.
Ошибка System.Windows.Data: 4: Не удается найти источник для привязки со ссылкой 'RelativeSource FindAncestor, AncestorType =' System.Windows.Controls.DataGrid ', AncestorLevel =' 1 ''. BindingExpression: Path = DataContext.DayHeader; DataItem = NULL; целевым элементом является «TextBlock» (Name = ''); target свойство is 'Text' (type 'String')
Редактировать: Я могу воспроизвести эту ошибку только в том случае, если у меня есть TabControl с более чем одним TabItem. Я обновил свой код. Извините за любую путаницу, но добавление другого TabItem - это то, что делает DayHeader недоступным.
Edit2: Я знаю, что многие люди используют Snoop, чтобы помочь им связать проблемы. Хорошо, когда я проверяю заголовки столбцов на Snoop, текст волшебным образом появляется, когда я их подсвечиваю. Я понятия не имею, почему это работает так, надеюсь, кто-то, у кого больше знаний о Snoop, сможет помочь. Вот код для доступа к DayHeader и, возможно, это поможет.
//Code Behind
private string dayHeader;
public string DayHeader
{
get { return dayHeader; }
set
{
dayHeader = value;
NotifyOfPropertyChange(() => DayHeader);
}
}
Благодарим за любую помощь.
Спасибо. Первое предложение - это то, что я уже пробовал, и не печально. Второе предложение дает мне ошибку. Невозможно вызвать MarkupExtension.ProvideValue из-за циклической зависимости. Свойства внутри MarkupExtension не могут ссылаться на объекты, которые ссылаются на результат MarkupExtension. Пораженные MarkupExtensions: System.Windows.Data.Binding – Kohins
Kohins: Я отредактировал ответ, теперь это работа. –
Я не пробовал использовать это, но я замечаю, что если переместить вторую вкладку в первое место, все будет хорошо. Как-то, когда tabitem находится во втором месте, datagrid не подбирает изменения или что-то еще? – Kohins