我是WPF的新手,如果我漏掉了一些显而易见的东西,请原谅。
我有以下列表视图控件(为简洁起见删除了非相关细节)
<ListView>
<ListView.View>
<GridView>
<GridViewColumn Header="Type" DisplayMemberBinding="{Binding Type}"/>
<GridViewColumn Header="Details" DisplayMemberBinding="{Binding Details}"/>
</GridView>
</ListView.View>
</ListView>
我在代码后台添加项目到这个列表视图中。
public void Add(LogEntry entry)
{
ListViewItem item = new ListViewItem();
item.Content = entry;
listView.Items.Add(item);
}
LogEntry拥有公共字符串属性"Type"和"Details"
到目前为止,一切都很好,但是... 我希望我的Details属性本身就是一个元素(TextBox或DockPanel包含不同类型的内容) 我该如何将此元素绑定到列表列?
使用上述代码,将“Details”更改为元素后,我只会在列表框中得到类名(例如System.Windows.Control.TextBox),因为单元格默认显示属性的ToString()值。 我已经谷歌了一些示例,它们使用了DataTemplate,但我找不到将元素绑定到面板内容的示例。 该控件无法在xaml中定义,因为其结构和内容直到运行时才知道
绑定是单向的(我只需要显示列表,而不需要更新底层数据结构)
为了让我的问题更清楚,我想绑定以下列表项
class LogEntry
{
public string Type {get;}
public DockPanel Details {get;} // This dock panel was created by code and contains
// various elements not predictable at compile time
}