Timo M.
Timo M.

Reputation: 25

DataGridColumn Visibility with Converter

I have a DataGrid with an Itemsource of a collection. This DataGrid shows me some values of the axis of a machine. There are different columns, the first important is the axisName. The last important one is the "ReferenceSetting" button.

After pressing this button, a ReferenceSequence is starting. Now, not all Axis are configured to set a reference, this buttons should be collapsed or hidden.

All configured Axis are saved on a List.

Now how can I bind the name of the column to the visibility property of the button column and give the converter the list to check the configuration?

Thanks for helping.

            <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:\Users\PA\Source\Repos\Source\Common.Resources\ImageResources\TestPicture.jpg" Height="24" Width="24"/>
                            </Button>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
            </DataGrid.Columns>
            </DataGrid>

Upvotes: 1

Views: 173

Answers (1)

Yitzchak
Yitzchak

Reputation: 3416

This should do the job

<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:\Users\PA\Source\Repos\Source\Common.Resources\ImageResources\TestPicture.jpg" Height="24" Width="24"/>
                    </Button>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

Upvotes: 1

Related Questions