如何有条件地隐藏WPF数据网格的templatecolen中的元素

本文关键字:网格 templatecolen 元素 数据网 数据 有条件 隐藏 WPF | 更新日期: 2023-09-27 17:53:53

上下文:一个带有数据网格的c# 4.0 WPF应用程序,它有一个显示进度条的templatecolation

如何让网格只显示基于条件的某些项目的进度条?

也许监听事件和隐藏单元格/将可视设置为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>

如何有条件地隐藏WPF数据网格的templatecolen中的元素

根据可见性的条件,您有几个选项。如果你有一个单独的属性,比如"IsPotentialVisible",那么你可以使用boolean visibilityconverter将它绑定到进度条的Visibility属性。

接下来,如果它是一个简单的条件,比如"当Potential == 0时隐藏",那么您可以创建一个DataTrigger来处理这个条件。

否则,你也可以创建一个自定义转换器,根据需要的任何输入属性/参数输出可见性。

刚刚找到了答案,我只是添加了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>