1

上下文:一个 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>

4

2 回答 2

2

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

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

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

于 2011-04-27T15:15:15.700 回答
2

刚刚找到了答案,我只是简单的添加了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>
于 2011-04-27T15:23:28.883 回答