【发布时间】:2011-12-02 20:23:33
【问题描述】:
我是 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 具有“类型”和“详细信息”的公共字符串属性
到目前为止,一切都很好,一切都很好,但是.. 我希望我的 details 属性本身是一个元素(包含各种类型内容的 TextBox 或 DockPanel) 如何将此元素绑定到列表列?
使用上面的代码,将“详细信息”更改为一个元素,我只需在列表框中获取类名(例如 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
}
【问题讨论】: