使用转换器的DataGridColumn可见性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用转换器的DataGridColumn可见性相关的知识,希望对你有一定的参考价值。

我有一个DataGrid与一个集合的Itemsource。此DataGrid显示了一些机器轴的值。有不同的列,第一个重要的是axisName。最后一个重要的是“ReferenceSetting”按钮。

按下此按钮后,将启动ReferenceSequence。现在,并非所有Axis都配置为设置引用,此按钮应折叠或隐藏。

所有已配置的轴都保存在列表中。

现在,如何将列的名称绑定到按钮列的visibility属性,并为转换器提供列表以检查配置?

谢谢你的帮助。

            <DataGrid Margin="8" Style="{StaticResource CoDeDataGrid}" ItemsSource="{Binding Path=TableDataGridView}" 
                                      AutoGenerateColumns="False" IsReadOnly="True" Name="AxisGrid">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Name}">
                        <DataGridTextColumn.HeaderTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding DataContext.Coordinatesystem, 
                                    Converter={StaticResource EnumToDisplayTextConverter} , RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
                            </DataTemplate>
                        </DataGridTextColumn.HeaderTemplate>
                    </DataGridTextColumn>
                    ...
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                            <Button Style="{StaticResource CoDeButtonSmall}"
                                    Command="{Binding  Path=DataContext.OnSetReferenceCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" 
                                    CommandParameter="{Binding ElementName=AxisGrid, Path=SelectedItem}">
                                <!-- Visibility="{Binding Name, Converter={StaticResource ButtonNameToVisibilityConverter}, ConverterParameter={...Property TeachAxis of My ViewModel....}">-->
                                <Image Source="C:UsersPASourceReposSourceCommon.ResourcesImageResourcesTestPicture.jpg" Height="24" Width="24"/>
                            </Button>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
            </DataGrid.Columns>
            </DataGrid>
答案

这应该做的工作

<DataGrid Margin="8" Style="{StaticResource CoDeDataGrid}" ItemsSource="{Binding Path=TableDataGridView}" 
          AutoGenerateColumns="False" IsReadOnly="True" Name="AxisGrid">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Name}">
            <DataGridTextColumn.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding DataContext.Coordinatesystem, 
                      Converter={StaticResource EnumToDisplayTextConverter} , RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
                </DataTemplate>
            </DataGridTextColumn.HeaderTemplate>
        </DataGridTextColumn>
        ...
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Style="{StaticResource CoDeButtonSmall}"
                       Command="{Binding  Path=DataContext.OnSetReferenceCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" 
                       CommandParameter="{Binding ElementName=AxisGrid, Path=SelectedItem}"
                       Visibility="{Binding Name, Converter={StaticResource ButtonNameToVisibilityConverter}, ConverterParameter={DataContext.TeachAxis}">
                        <Image Source="C:UsersPASourceReposSourceCommon.ResourcesImageResourcesTestPicture.jpg" Height="24" Width="24"/>
                    </Button>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

以上是关于使用转换器的DataGridColumn可见性的主要内容,如果未能解决你的问题,请参考以下文章

如何绑定 DataGridColumn.Visibility?

将 XAML 中的可见性绑定到可见性属性

“私有”可见性修饰符 - 将 C# 转换为 VB 时如何处理差异?

为啥在使用传统绑定时 bool 可以在没有转换器的情况下为可见性工作

WPF 可见性折叠保留空间

使用先前启动的 Activity 转换恢复 Activity 时查看可见性状态丢失