我正在使用DataTemplate来定义DevExpress GridControl中使用的单元格模板。我想在Dictionary属性和TextEdit控件的EditValue属性之间创建双向绑定。我使用的DataTemplate定义为:
<DataTemplate x:Key="GasValueColumnTemplate">
<ContentControl>
<dxg:GridColumn FieldName="{Binding Path=(dxci:DependencyObjectExtensions.DataContext).FieldName, RelativeSource={RelativeSource Self}}"
Header="{Binding Path=(dxci:DependencyObjectExtensions.DataContext).Header, RelativeSource={RelativeSource Self}}"
Width="{Binding Path=(dxci:DependencyObjectExtensions.DataContext).Width, RelativeSource={RelativeSource Self}}">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<dxe:TextEdit
EditValue="{Binding Path=RowData.Row.GasValueDictionary[Column.Header].Quantity}">
</dxe:TextEdit>
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
</ContentControl>
</DataTemplate>
绑定的 Path 部分指定GasValueDictionary,“Column.Header”的索引值是列的显示名称,也是所需字典对象属性的Key值。 问题是 Column.Header 值未被评估,我得到Key Not Found错误。当然,如果我为索引值指定了一个硬编码字符串,它也是字典中的一个键,那么一切正常。
我的问题是,如何在XAML中指定必须在运行时评估的字典的索引值?
提前致谢!
在回应Freggar时,我修改了上面看到的TextEdit声明,如下所示:
<dxe:TextEdit>
<dxe:TextEdit.EditValue>
<MultiBinding Converter="{converters:DictionaryValueConverter}" >
<Binding Path="RowData.Row"/>
<Binding Path="Column.Header"/>
</MultiBinding>
</dxe:TextEdit.EditValue>
</dxe:TextEdit>
它适用于从字典中检索数据。由于TextEdit具有双向绑定,因此如果修改了EditValue,则ConvertBack函数无法正确更新字典。