在WPF XAML中,如何动态创建与索引属性的双向绑定?

时间:2018-06-18 14:44:51

标签: c# wpf xaml

我正在使用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函数无法正确更新字典。

0 个答案:

没有答案
相关问题