1

我有一个包含 3 列的数据网格。列是Property, Operator, Value。这些是关于存储在我们数据库中的文档。Property和列的值Operator是从业务对象中的枚举定义的。

我有以下类来绑定 DataGrid:

public class DocumentProperty
{
    public SearchProperties SearchProperty { get; set; }
    public SearchOperator Operator { get; set; }
    public string SearchValue { get; set; }
}

前两个属性是枚举。我已将上述类的可观察集合绑定到我的数据网格。所有的列都是模板列。前两列有一个CellEditTemplate在其中定义的组合框。我已经使用对象数据提供者绑定了枚举。第三列是模板列,它是使用模板选择器加载的。这样做的原因是根据第一列中选​​择的属性启用加载不同的控件:

在此处输入图像描述

此外,我有一个组合框选择更改事件以在第三列中动态加载控件(显式设置列的数据模板)并设置数据源(用于 AutoCompleteBox)。当网格最初加载时将允许添加行设置为 true,上述方法工作正常。我可以将加载的控件值获取到对象中(使用 AutoCompleteBox 中的选定项等)。

但是我在上述输入中遇到的问题被存储为搜索过滤器并被检索。检索时,我无法将属性值绑定到动态加载的控件。我已经尝试过 DataGrid 的各种事件(RowLoading、Loaded、SelectedCellChanged 等)。

最后,我可以在模板选择器中设置控件的值。但是当我看到屏幕时,它显示的是空白内容(用于自动完成框和组合框)。有人可以建议我如何将动态控件与 SearchValue 重新绑定?

更多细节:

上述网格的内容存储为 DocumentProperty 的 observable 集合。对象的值作为 XML 存储在数据库表中。当用户再次登录时,XML 的内容被转换为 DocumentProperty 的 Observable 集合并再次绑定到网格。在这里,我遇到了一个问题,如果我放置一个单元格模板并将文本块放入其中,我可以毫无问题地绑定 SearchValue 属性。但我正在搜索值属性中查找绑定对象的 ID。所以绑定网格中的文本块将始终显示 ID。

因为我想在上面的 AutoCompleteBoxes 中显示 Tempalte、Docment、Owner 等的相应名称。因此,我使用单元格模板选择器将该列作为 DataTemplate 列。

4

0 回答 0