Windows 8网格应用程序中的空数据模板

时间:2014-04-25 16:46:30

标签: c# xaml windows-8

我正在使用默认的网格应用模板,我有一个问题,我还没有找到一个好的答案。

如果你只是使用样本数据并从分组中删除所有数据元素,有没有办法显示一个简单地说“没有项目”的项目模板?

组标题仍然存在,这很好,只是有一个指标,项目列表中没有数据。

我尝试了一个DataTemplateSelector但如果没有项目则不会使用它。像ListView或GridView这样的东西没有EmptyDataTemplate

有点莫名其妙

修改 我问这个特定情况的原因是这个应用程序显示按公司分组的员工。如果您添加新公司,我仍然希望显示该公司的名称,如果您单击该组的标题,即使没有分配员工,您仍然可以看到有关该公司的信息。

因此,即使没有分配员工(项目),我的组标题仍然可以导航到导航栏中。我想直接在组标题下面的项目说“没有员工在场”,但仍然可以看到公司信息。

例如

公司1>

  • 员工1
  • 员工2
  • 员工3

公司2>

  • 没有员工在场

点击公司2仍会在GroupDetails页面上显示有关该公司的信息。

2 个答案:

答案 0 :(得分:1)

我设法通过另一个问题here的组合解决我的问题,并通过在我的小组中的空白项目中进行存根。

所以我在虚假员工中留下了空数据,然后调整了我的DataTemplate。诀窍是获取对象的绑定容器,并为符合特定条件的项目禁用它。

public class CompanyTemplateSelector : DataTemplateSelector
{
    protected override Windows.UI.Xaml.DataTemplate SelectTemplateCore(object item, Windows.UI.Xaml.DependencyObject container)
    {
        var containingItem = container as GridViewItem;

        if (item is UserDetails)
        {
            UserDetails detail = (UserDetails)item;
            if (detail.UserId == -1) 
            {
                containingItem.IsEnabled = false;
                return Empty;
            }
            else
            {
                containingItem.IsEnabled = true;
                return DataPresent;
            }
        }

        return DataPresent;
    }

    public DataTemplate DataPresent
    {
        get;
        set; 
    }

    public DataTemplate Empty
    {
        get;
        set; 
    }
}

所以我的结果是以下

step1

然后点击标题

step2

答案 1 :(得分:0)

如果您想要显示组标题并显示组中没有项目,那么

DataTemplateSelector是您最好的选择。更好的选择可能是不显示空组 - 使用GroupStyle.HidesIfEmpty