首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GridViewColumn.CellTemplate DataTemplate ContentPresenter

GridViewColumn.CellTemplate DataTemplate ContentPresenter
EN

Stack Overflow用户
提问于 2017-10-27 10:13:47
回答 1查看 1.3K关注 0票数 0

我有一个ListView,它使用DataTemplates。如果我在XAML上定义的列中使用这一点,那么它是如何工作的。我的DataTemplates在我看来是被使用的。但是,如果我想在第二个ListView中使用相同的ListView (向ListView添加新列),则不使用DataTemplate。我该怎么办?

第一个ListView的XAML代码如下所示:

代码语言:javascript
复制
<GridViewColumn x:Name="lvSecondColumn" Header="Value" Width="200">
   <GridViewColumn.CellTemplate>
      <DataTemplate>
        <ContentPresenter Content="{Binding}"/>
      </DataTemplate>
  </GridViewColumn.CellTemplate>
</GridViewColumn>

我用于在第二个ListView中生成列的代码是:

代码语言:javascript
复制
DataColumn dc = (DataColumn)colum;

GridViewColumn column = new GridViewColumn( );
column.DisplayMemberBinding = new Binding( dc.ColumnName ) );
column.Header = dc.ColumnName;
TestColumns.Columns.Add( column );

TestListView.ItemsSource = dt.DefaultView; 

在WPFInspector中,我看到动态生成的列中没有ContentPresenter。从ContentPresenter从WPFInspector丢失的图片如何将ContentPresenter添加到动态列?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-27 12:28:48

不能同时设置绑定和DataTemplate。根据docs https://msdn.microsoft.com/en-us/library/system.windows.controls.gridviewcolumn.displaymemberbinding(v=vs.110).aspx

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

如果使用绑定,那么它将生成一个带有绑定对象的".ToString()“的文本框。如果您知道ListView中项的结构,则只需在其中使用适当的绑定即可生成DataTemplates。但是,在动态生成列时,这是一个问题。

您可以动态地为您的列生成一个数据板,并在其中集成绑定:

代码语言:javascript
复制
public DataTemplate CreateColumnTemplate(string property)
{
    StringReader stringReader = new StringReader(
    @"<DataTemplate 
        xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""> 
            <ContentPresenter Content=""{Binding " + property + @"}""/> 
        </DataTemplate>");
    XmlReader xmlReader = XmlReader.Create(stringReader);
    return XamlReader.Load(xmlReader) as DataTemplate;
}

然后,您可以生成这样的列:

代码语言:javascript
复制
GridViewColumn column = new GridViewColumn( );
column.CellTemplate = CreateColumnTemplate(dc.ColumnName);
column.Header = dc.ColumnName;
TestColumns.Columns.Add( column );

我没有运行代码,可能有一些小错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46972678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档