Как условно скрыть элементы в TemplateColumn WPF DataGrid? - PullRequest
1 голос
/ 27 апреля 2011

Контекст: WPF-приложение C # 4.0 с сеткой данных, в которой один столбец TemplateColumn показывает индикатор выполнения.

Как можно заставить сетку отображать индикатор выполнения только для определенных элементов в зависимости от условия?

Возможно, прослушивание событий и сокрытие ячеек / установка visibile на false было бы вариантом.

Вот как это выглядит сейчас (индикатор выполнения отображается для всех элементов):

<UserControl.Resources>
    <DataTemplate x:Key="PotentialDataTemplate">
        <Grid Width="70">
            <ProgressBar
                Height="12"
                VerticalAlignment="Center"
                Value="{Binding Path=Potential, Mode=OneWay}" />
        </Grid>
    </DataTemplate>
</UserControl.Resources>

<DataGrid x:Name="dataGrid"
        ItemsSource="{Binding Path=Items}"
        AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn
            Header="{Binding Source={x:Static text:TextBindingProvider.Instance}, Path=CompendiumHeaderPotential}"
            Width="Auto"
            MinWidth="80"
            CellTemplate="{StaticResource PotentialDataTemplate}"
            IsReadOnly="true"
            SortMemberPath="Potential" />
    </DataGrid.Columns>
</DataGrid>

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Только что нашел ответ, я просто добавляю атрибут Visibility и привязываю его к некоторой условной логике во ViewModel.

    Visibility = "{Binding Path=ShowPotentialBar, Mode=OneWay}

Итак:

    <Grid Width="70">
        <ProgressBar
            Height="12"
            VerticalAlignment="Center"
            Value="{Binding Path=Potential, Mode=OneWay}" 

            Visibility = "{Binding Path=ShowPotentialBar, Mode=OneWay}" />

    </Grid>
2 голосов
/ 27 апреля 2011

У вас есть несколько вариантов в зависимости от условий видимости. Если у вас есть отдельное свойство, такое как «IsPotentialVisible», вы можете привязать его к свойству Visibility индикатора выполнения с помощью BooleanToVisibilityConverter.

Далее, если это простое условие, такое как «скрыть при потенциале == 0», вы можете создать DataTrigger, который обрабатывает это условие.

В противном случае вы также можете создать собственный конвертер, который будет отображать видимость в зависимости от требуемых входных свойств / параметров.

...