我有一个嵌套的数据网格,我希望在内部数据网格没有任何数据时隐藏外部数据网格列。我正在使用MVVM模式。模型填充绑定到视图的集合中的数据。
Component1,2和3的列表通过外部数据网格内的数据网格显示。每个标签系列都有左右两个集合。
当模型没有任何用于左标签收集的组件时,我希望完全隐藏左列。如下图所示。同样适用于右栏。
请帮助我实现这一目标。
我在这个网站和谷歌上搜索过类似的情况,但是找不到类似的东西。
以下是XAML代码:
<DataGrid ItemsSource="{Binding Labels}"
CanUserAddRows="False"
CanUserDeleteRows="False">
<DataGrid.Columns>
<DataGridTemplateColumn Width="10*" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding LabelFamily}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Right" Width="25*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding LeftLabel.Components}"
CanUserAddRows="False"
CanUserDeleteRows="False">
</DataGrid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Left" Width="25*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding RightLabel.Components}"
CanUserAddRows="False"
CanUserDeleteRows="False">
</DataGrid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我不会发布模型代码以尽可能缩短帖子。
答案 0 :(得分:0)
你可以像这样创建转换器(我使用ObservableCollection进行测试,你应该使用你的容器):
public class NoElementVisibilityConverter : MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return Visibility.Collapsed;
ObservableCollection<int> ienum = value as ObservableCollection<int>;
return ienum == null || ienum.Count() == 0 ? Visibility.Collapsed : Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (_converter == null)
_converter = new NoElementVisibilityConverter();
return _converter;
}
private static NoElementVisibilityConverter _converter = null;
}
并在你的专栏上使用它:
<DataGridTemplateColumn Header="Left" Width="25*"
Visibility={Binding RightLabel.Components, Converter={local:NoElementVisibilityConverter}>
不要忘记在Window中包含Converter名称空间。