没有记录时隐藏DataGrid

时间:2015-05-06 09:26:16

标签: wpf xaml

Currenly我要求在没有填充记录时隐藏我的数据网格控件。

我尝试设置如下,但它不起作用。

<DataGrid ItemsSource="{Binding Employees}" AutoGenerateColumns="True" IsReadOnly="True" Visibility="{Binding Employees.Count>0, Converter={StaticResource BooleanToVisibilityConverter}}"></DataGrid>

请为我建议一个解决方案

3 个答案:

答案 0 :(得分:2)

您可以创建自定义转换器,但在我看来,只需使用Style.Trigger就可以更轻松地将Visiblility设置为Employees.Count为0时的折叠,如下所示:

<DataGrid ItemsSource="{Binding Employees}" AutoGenerateColumns="True" IsReadOnly="True">
    <DataGrid.Style>
        <Style TargetType="{x:Type DataGrid}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Employees.Count}" Value="0">
                    <Setter Property="Visibility" Value="Collapsed"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.Style>
</DataGrid>

答案 1 :(得分:0)

您必须使用将整数转换为可见性的转换器。在你的情况下0隐藏/折叠以及0以上的所有内容都可见。

无法在绑定路径中使用表达式,因为WPF在内部使用反射来查找属性的值。

在您的情况下,转换器将如下所示:

public class CountToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type TargetType, object parameter, CultureInfo culture)
    {
        int count = value as int;
        if(count != null && count > 0) return Visibility.Visible;
        else return Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

您必须实施IValueConverterConvert用于将绑定转换为实际值。 ConvertBack将用于向相反方向转换。

要使用它,您必须引用程序集并将其添加为静态资源,就像您使用BooleanToVisibilityConverter所做的那样。

答案 2 :(得分:0)

我修改了@dkozl答案,以消除对ItemSource名称的依赖。现在,无论DataGrid的定义如何,我们都可以添加到所有ItemSource中。

<DataGrid>
    <DataGrid.Style>
        <Style TargetType="{x:Type DataGrid}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Items.Count, RelativeSource={RelativeSource Self}}" Value="0">
                    <Setter Property="Visibility" Value="Collapsed"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.Style>
</DataGrid>

如果您对此解决方案有疑问,请从Visibility本身中删除DataGrid属性。允许触发器确定可见性。

相关问题