Currenly我要求在没有填充记录时隐藏我的数据网格控件。
我尝试设置如下,但它不起作用。
<DataGrid ItemsSource="{Binding Employees}" AutoGenerateColumns="True" IsReadOnly="True" Visibility="{Binding Employees.Count>0, Converter={StaticResource BooleanToVisibilityConverter}}"></DataGrid>
请为我建议一个解决方案
答案 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();
}
}
您必须实施IValueConverter
。 Convert
用于将绑定转换为实际值。 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
属性。允许触发器确定可见性。