0

I am struggling to hide columns of a Datagrid by binding the Visibility property to a property of the viewModel. ItemsSource works fine and I have many lines in the grids, to the Datacontext is set properly. Can you please help me with what I am doing wrong ? Thanks

<StackPanel>        
    <DataGrid ItemsSource="{Binding SortedPlanning}" IsReadOnly="True" AutoGenerateColumns="False" CanUserResizeRows="False">
    <DataGrid.Columns >
            <DataGridTextColumn Header ="NNI" Binding="{Binding SortedPlanning.Nni}" Width="80" Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}, Path=ColumnVisibility}">
                <DataGridTextColumn.ElementStyle>
                    <Style>
                        <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
            <DataGridTextColumn Header ="Nom" Binding="{Binding LastName}" Width="120" Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=ColumnVisibility}">
            <DataGridTextColumn.ElementStyle>
                <Style>
                    <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
                </Style>
            </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
            <DataGridTextColumn Header ="Prénom" Binding="{Binding FirstName}" Width="80" Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ColumnVisibility}">
            <DataGridTextColumn.ElementStyle>
                <Style>
                    <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
                </Style>
            </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>                
            </DataGridTextColumn>
            <DataGridTextColumn Header ="Campagne" Binding="{Binding Campaign}" Width="120">
            <DataGridTextColumn.ElementStyle>
                <Style>
                    <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
                </Style>
            </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>                
</DataGrid>
</StackPanel>

View model :

public interface IPlanningViewModel : IDisposable
{
    ObservableCollection<PlanningEntry> SortedPlanning { get; }
    Visibility ColumnVisibility { get; }
    bool FilterGrid { get; set; }
    DateTime FromDate { get; set; }
    DateTime ToDate { get; set; }
}

I expect columns "NNI", "Nom" and "Prénom" to be bound to the ColumnVisibility of the VM, but it does not happen.

ElRosbif
  • 353
  • 1
  • 6
  • 18

1 Answers1

0

You will have use below syntax.

It should resolve your issue.

<DataGridTextColumn Visibility="{Binding Path=DataContext.ColumnVisibility, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
Manoj Choudhari
  • 5,277
  • 2
  • 26
  • 37