0

我有一个使用gridview 显示数据的列表视图。此列表显示网格视图的典型数据。大量数据显示在行和列中。但是,在某些行上,我没有任何数据要显示在列中。我想换出该行的项目模板并为整行显示另一个模板,该模板将为文本显示“空白行”或“空行”之类的内容,并且还设置整行而不是单个单元格的样式。

我一直在尝试使用这篇文章: http ://cloudstore.blogspot.com/2008/06/creating-custom-view-mode-that-supports.html 。

所以我有一个列表视图的自定义视图。基本上,我已经对 GridView 类进行了子类化,并且在 PrepareItems 方法覆盖上,我可以选择要为特定行或默认模板显示的新模板。但是,当我尝试选择新模板时,gridview 将永远不会为该行呈现任何内容。如果我使用默认模板,它仍然会呈现。我假设 GridView 的布局干扰了我对要换出的行的模板设置。这是可能的还是我必须创建一个模仿 GridView 而不是 GridView 类的子类的自定义视图?我想保持这些列的原样,而不需要太多的返工。有什么建议或任何人对这种情况有经验吗?

4

2 回答 2

1

您可以使用数据触发器。使用这样的代码(根据 SomeItemProperty 的值是否为 0 来切换模板):

<DataTemplate x:Key="MyItemTemplate">
    <StackPanel>
        <StackPanel Name="normalStackPanel">
            <!-- template for normal row -->
        </StackPanel>
        <StackPanel Name="emptyStackPanel" Visibility="Collapsed">
            <!-- template for empty row -->
        </StackPanel>
    </StackPanel>

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding SomeItemProperty}" Value="0">
            <Setter TargetName="normalStackPanel" Property="Visibility" Value="Collapsed" />
            <Setter TargetName="emptyStackPanel" Property="Visibility" Value="Visible" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

希望能帮助到你。

于 2009-12-01T17:48:28.583 回答
1

好的,这就是我为解决我的问题所做的,但是它会导致我的一些返工。我用项目控件替换了我的列表视图。所以我不再使用列表视图的 GridView 了。相反,我定义了一个 GridViewColumnCollection,并按照我想要的方式设置了我的列。

对于我的标题,我使用了 GridViewHeaderRowPresenter,其列属性绑定到 GridViewColumnCollection。这会处理列标题。

在我的标题下,我插入了绑定到我的项目列表的 ItemsControl。但是,我现在使用 DataTemplateSelector,它将根据项目及其属性交换模板。如果您不熟悉 DataTemplate Selector,请转到此处:数据模板选择器

基本上,列表中项目的默认模板是 GridViewRowPresenter,其列属性绑定到 GridViewColumnCollection。这使它与标题保持一致。但是,我仍然可以通过数据模板选择器将模板换成一行。这解决了我的问题。

但是,我现在必须使用我已设置样式的网格视图重新处理列表视图,并使用此方法。因此,这并非没有代价。

于 2009-12-01T21:09:56.120 回答