tengo una casilla de verificación, y un ItemsControl poblar varios DataGrids la siguiente manera:WPF La unión a ElementName dentro ItemsControl
<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>
Esto crea errores de salida vinculante, ya que trata de encontrar IsChecked en el DataGridTemplateColumn. Si trato de buscar un antepasado relativa recibo la excepción:
Binding.RelativeSource cannot be set while using Binding.ElementName.
Tengo un modelo de vista, y se adhieren a MVVM su mayoría, pero en este caso me gustaría mucho para mantener las condiciones de visibilidad de las columnas en la capa de la vista . Tenga en cuenta que BoolToVis
solo convierte Boolean en Visibilidad.
Editar
Aquí es un ejemplo de lo que estoy tratando de hacer:
<DataGridTemplateColumn Header="Birthday" Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MyView} }, Path=IsChecked, ElementName=UI_BirthdayVisibleCB, Converter={StaticResource BoolToVis}}" />
Se compila pero no se ejecuta sin embargo, se produce la excepción anteriormente.
El problema es que necesito tanto Element name como RelativeSource, ya que mi DataContext se establece en el elemento actual de ItemsControl. – bufferz
Publique el código que usa ElementName y RelativeSource por favor. – McStretch
Ok - Edité mi pregunta para mostrar lo que estoy intentando hacer. – bufferz