当前位置:  开发笔记 > 编程语言 > 正文

WPF - 设置DataTemplate以编程方式添加GridViewColumns

如何解决《WPF-设置DataTemplate以编程方式添加GridViewColumns》经验,为你挑选了1个好方法。

找不到这个答案.

我有一个WPF ListView控件,可以包含不同数量的列.例如,它可以显示客户数据,显示列ID,名称,电子邮件等,或者它可以包含产品,显示ID,名称,价格,NumberInStock,制造商,以及你得到的想法:不同数量的列,不同的名称.

我想要做的是,某些列以不同的方式显示数据.例如,我不想打印"是"或"否"作为NumberInStock列的值,而是想显示一个整洁的图像.

如果我有固定数量的列,并且要绑定固定名称,我会看到这很简单.只需为该特定列定义DataTemplate,我就可以使用它来定义列的视图.但是,在我的情况下,我无法看到如何做到这一点.

我是WPF的新手,请原谅我,如果我的方法不好:-)在我的XAML中,我已经定义了一个ListView控件,它几乎是空的.在我的代码背后,我使用:

    // get all columns from my objects (which can be either a Customer of Product)
    foreach (string columnName in MyObject.Columns)
        {
          GridViewColumn column = new GridViewColumn();
          // Bind to a property of my object
          column.DisplayMemberBinding = new Binding("MyObject." + columnName);
          column.Header = columnName;
          column.Width = 50;
          // If the columnname is number of stock, set the template to a specific datatemplate defined in XAML
          if (columnName == "NumberInStock")
            column.CellTemplate = (DataTemplate)FindResource("numberInStockImageTemplate");
          explorerGrid.Columns.Add(column);
        }

好吧,我相信这可以做得更漂亮一点(如果你有任何建议,请!)但最大的问题是我看不到专栏中的任何差异.它只显示"NumberInStock"列的文本值.我的DataTemplate在XAML中定义:



      
        
          
        
      


当然,我仍然需要添加它会显示"是"或"否"图像的功能,具体取决于NumberInStock的值,但这确实是第2步.我很乐意在ListView中看到图像和红色边框!

拉谢,提前谢谢



1> willt..:

这让我吵了一阵.

DisplayMemberBinding并且CellTemplate是相互排斥的.指定a DisplayMemberBinding会导致CellTemplate被忽略.

来自MSDN:

以下属性都用于定义列单元格的内容和样式,并按其优先顺序列出,从最高到最低:

* DisplayMemberBinding
* CellTemplate
* CellTemplateSelector

另请参阅C#Disciples帖子.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有