【问题标题】:Nested datagrid column visibility based on the contents of its inner datagrid基于其内部数据网格内容的嵌套数据网格列可见性
【发布时间】:2016-06-15 09:55:54
【问题描述】:

我有一个嵌套数据网格,当内部数据网格没有任何数据时,我想隐藏外部数据网格列。我正在使用 MVVM 模式。模型填充绑定到视图的集合中的数据。

Filled Datagrid

组件 1、2 和 3 的列表通过外部数据网格内的数据网格显示。每个标签系列将有左右两个集合。

当模型没有左标签集合的任何组件时,我希望将左列完全隐藏。如下图所示。右列也是如此。

Left Column Hidden

请帮助我实现这一目标。

我在这个网站和谷歌上搜索了类似的情况,但找不到类似的东西。

这是 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>

我没有发布模型代码以使帖子尽可能简短。

【问题讨论】:

  • 这样可以解决这个问题吗?或者我正在尝试一些错误并且需要一些更改或使用其他一些控件?

标签: c# wpf xaml mvvm datagrid


【解决方案1】:

你可以像这样创建转换器(我使用 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}>

不要忘记在您的窗口中包含 Converter 命名空间。

【讨论】:

  • 感谢您的回复。我会尝试更新。
猜你喜欢
  • 2012-06-10
  • 2011-11-18
  • 2011-05-20
  • 1970-01-01
  • 2011-02-25
  • 2010-12-23
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多