У меня есть флажок, и ItemsControl заполняет несколько DataGrids следующим образом:
<Checkbox Content="Birthday Column Visible" x:Name="UI_BirthdayVisibleCB" />
<ItemsControl ItemsSource="{Binding Path=ParentsCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Children}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Birthday" Width="120" Visibility="{Binding IsChecked, ElementName=UI_BirthdayVisibleCB, Converter={StaticResource BoolToVis}}" >
...
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Rest of closing tags>
Это создает ошибки вывода привязки, поскольку он пытается найти IsChecked в DataGridTemplateColumn. Если я пытаюсь найти Относительного предка, я получаю исключение:
Binding.RelativeSource cannot be set while using Binding.ElementName.
У меня есть ViewModel, и я в основном придерживаюсь MVVM, но в этом случае я бы очень хотел сохранить видимость столбцов на уровне просмотра. Обратите внимание, что BoolToVis
просто преобразует Boolean в Visibility.
Edit
Вот пример того, что я пытаюсь сделать:
<DataGridTemplateColumn Header="Birthday" Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MyView} }, Path=IsChecked, ElementName=UI_BirthdayVisibleCB, Converter={StaticResource BoolToVis}}" />
Он компилируется, но не запускается, однако вызывает исключение, указанное выше.