Wpf 不存在记录时隐藏数据网格
目前,当数据网格控件中没有填充记录时,我需要隐藏数据网格控件 我试着像下面那样设置它,但没有效果Wpf 不存在记录时隐藏数据网格,wpf,xaml,Wpf,Xaml,目前,当数据网格控件中没有填充记录时,我需要隐藏数据网格控件 我试着像下面那样设置它,但没有效果 <DataGrid ItemsSource="{Binding Employees}" AutoGenerateColumns="True" IsReadOnly="True" Visibility="{Binding Employees.Count>0, Converter={StaticResource BooleanToVisibilityConverter}}"></
<DataGrid ItemsSource="{Binding Employees}" AutoGenerateColumns="True" IsReadOnly="True" Visibility="{Binding Employees.Count>0, Converter={StaticResource BooleanToVisibilityConverter}}"></DataGrid>
请为我推荐一个解决方案,您必须使用一个将整数转换为可见性的转换器。在您的情况下,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();
}
}
您必须实现IValueConverter
<代码>转换用于将绑定转换为实际值ConvertBack
将用于反向转换
要使用它,您必须引用程序集并将其添加为静态资源,就像您使用BooleantVisibilityConverter所做的那样。您可以创建自定义转换器,但在我看来,在这种情况下,简单地使用
Style.Trigger
更容易,当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>
我修改了@dkozl-answer以删除对
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>
如果您对此解决方案有问题,请从
DataGrid
本身删除Visibility
属性。允许触发器确定可见性。您是说BooleantVisibilityConverter吗?如果是,我已经这样做了,你可以创建自己的转换器。我将发布一个示例