首页 > 解决方案 > 在 WPF 中绑定祖先元素

问题描述

我正在努力通过将 Visibility 属性绑定到 viewModel 的属性来隐藏 Datagrid 的列。ItemsSource 工作正常,我在网格中有很多行,Datacontext 设置正确。你能帮我解决我做错了什么吗?谢谢

<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>

查看型号:

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

我希望列“NNI”、“Nom”和“Prénom”绑定到 VM 的 ColumnVisibility,但它不会发生。

标签: c#wpf

解决方案


You will have use below syntax.

It should resolve your issue.

<DataGridTextColumn Visibility="{Binding Path=DataContext.ColumnVisibility, RelativeSource={RelativeSource AncestorType=DataGrid}}" />

推荐阅读