【问题标题】:How to conditionally hide elements in a TemplateColumn of a WPF DataGrid?如何有条件地隐藏 WPF DataGrid 的 TemplateColumn 中的元素?
【发布时间】:2011-08-13 22:44:32
【问题描述】:

上下文:一个 C# 4.0 WPF 应用程序,其数据网格有一个 TemplateColumn 显示进度条。

如何让网格根据条件仅显示某些项目的进度条?

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

【问题讨论】:

    标签: c# wpf datagridview wpfdatagrid datagridtemplatecolumn


    【解决方案1】:

    刚刚找到答案,我只是简单的在ViewModel中添加Visibility属性并绑定到一些条件逻辑。

        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>
    

    【讨论】:

    • 除非 ShowPotentialBar 属性是 Visibility 枚举类型,否则如果没有 BooleanToVisibilityConverter,这将无法工作。
    • 其实它适用于String返回类型,返回“隐藏”、“可见”或“折叠”
    • 在这种情况下,默认绑定转换器会将字符串转换为等效的枚举 - 我不认为很多人会说这是一个好习惯。
    • @ach 谢谢,改成 System.Windows.Visibility.Visible
    【解决方案2】:

    根据可见性的条件,您有几个选项。如果您有一个单独的属性,例如“IsPotentialVisible”,那么您可以使用 BooleanToVisibilityConverter 将其绑定到进度条的 Visibility 属性。

    接下来,如果它是一个简单的条件,例如“当潜力 == 0 时隐藏”,那么您可以创建一个处理此条件的 DataTrigger。

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

    【讨论】:

    • 感谢您为我提供其他选项!现在我实现了我自己的属性,但我也会看看 DataTriggers。转换器到底是什么意思?这是我可以查找的 WPF 概念吗?
    • 嘿,WPF 中的绑定允许您指定一个从 IValueConverter 接口派生的类的转换器:msdn.microsoft.com/en-us/library/… 它允许进行复杂的绑定和许多其他有用的转换。
    猜你喜欢
    • 2010-11-20
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    相关资源
    最近更新 更多