WPF中的绑定祖先元素[重复]

Posted

技术标签:

【中文标题】WPF中的绑定祖先元素[重复]【英文标题】:Binding ancestor element in WPF [duplicate] 【发布时间】:2019-06-09 16:51:00 【问题描述】:

我正在努力通过将 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,但它没有发生。

【问题讨论】:

【参考方案1】:

您将使用以下语法。

它应该可以解决您的问题。

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

【讨论】:

不幸的是它不能解决问题。 DataGridTextColumn 仍然没有绑定到 VM 的 ColumnVisibility 属性。 而且“重复”的答案也没有解决问题......

以上是关于WPF中的绑定祖先元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

WPF中的文本框绑定更新[重复]

WPF中的自定义模型绑定[重复]

为什么我不能绑定到WPF中的类上的字段而不是绑定到属性[重复]

无法数据绑定滑块 WPF 的值 [重复]

WPF绑定StringFormat不会改变输出[重复]

WPF数据绑定到图像文件永远锁定该文件[重复]