我有一个ListView,它使用DataTemplates。如果我在XAML上定义的列中使用这一点,那么它是如何工作的。我的DataTemplates在我看来是被使用的。但是,如果我想在第二个ListView中使用相同的ListView (向ListView添加新列),则不使用DataTemplate。我该怎么办?
第一个ListView的XAML代码如下所示:
<GridViewColumn x:Name="lvSecondColumn" Header="Value" Width="200">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>我用于在第二个ListView中生成列的代码是:
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添加到动态列?
发布于 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。但是,在动态生成列时,这是一个问题。
您可以动态地为您的列生成一个数据板,并在其中集成绑定:
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;
}然后,您可以生成这样的列:
GridViewColumn column = new GridViewColumn( );
column.CellTemplate = CreateColumnTemplate(dc.ColumnName);
column.Header = dc.ColumnName;
TestColumns.Columns.Add( column );我没有运行代码,可能有一些小错误。
https://stackoverflow.com/questions/46972678
复制相似问题