模板列中的绑定控件

时间:2012-03-05 15:33:08

标签: wpf datagrid datatemplate autocompletebox datatemplateselector

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

我有以下类来绑定DataGrid:

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

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

enter image description here

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

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

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

更多详情:

上述网格的内容存储为DocumentProperty的可观察集合。对象的值在数据库表中以XML格式表示。当用户再次登录时,XML的内容将转换为DocumentProperty的Observable集合并再次绑定到网格。在这里,我面临一个问题,如果我放置一个单元格模板并将文本块放在其中,我可以绑定SearchValue属性而没有任何问题。但是我在搜索值属性中搜索绑定对象的ID。因此,绑定网格中的文本块将始终显示ID。

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

0 个答案:

没有答案