【问题标题】:Binding ancestor element in WPF [duplicate]WPF中的绑定祖先元素[重复]
【发布时间】: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,但它没有发生。

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    您将使用以下语法。

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

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

    【讨论】:

    • 不幸的是它不能解决问题。 DataGridTextColumn 仍然没有绑定到 VM 的 ColumnVisibility 属性。
    • 而且“重复”的答案也没有解决问题......
    猜你喜欢
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 2016-12-08
    • 2022-11-18
    • 2015-04-14
    • 2011-10-13
    相关资源
    最近更新 更多