ComboBoxEdit排序更改基础数据

时间:2017-02-15 18:22:20

标签: wpf data-binding

在我的Grid我定义了GridColumn.CellTemplate列的ComboBoxEdit,例如'UpdateReason'动态如下。这允许我为多个不同的下拉菜单动态创建DataTemplate,并将ItemsSource绑定到ViewModel.ComboBoxValues字典,该字典包含所有行的下拉值的静态列表。

首先显示数据时似乎一切正常,但是当我单击列标题对组合框列进行排序时,绑定数据值即RowData.Row.Order.OrderData[UpdateReason]会发生变化,因此唯一的UpdateReasons会丢失。其他列以锁定步骤相互移动,但此组合框下拉屏幕上的文本值保持不变。

我在这里做错了什么?所有SelectedItem文本值都包含在ItemsSource中,因此它应该能够正确绑定。我尝试使用SelectedItem Binding Mode,即OneWay等,但这似乎无法修复它。

public static DataTemplate GenerateComboBoxDataTemplate(OrderType orderType, string columnName, string viewName, int comboBoxCount)
    {
        string selectedIndexMarkup = comboBoxCount == 1 ? @" dxe:SelectedIndex=""0""" : string.Empty;

        string markup =
            string.Format(@"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
                xmlns:dxe=""http://schemas.devexpress.com/winfx/2008/xaml/editors"" xmlns:Key=""ComboBoxEditDataTemplate"">
            <dxe:ComboBoxEdit x:Name=""PART_Editor"" dxe:IsTabStop=""False"" dxe:Focusable=""True"" dxe:ImmediatePopup=""True"" dxe:IsTextEditable=""False"" dxe:SelectAllOnGotFocus=""True""
                              dxe:ItemsSource=""{{Binding Path=ViewModel.ComboBoxValues[{0}][{1}], ElementName={2}}}"" dxe:SelectedItem=""{{Binding Path=RowData.Row.Order.OrderData[{1}]}}""{3} />
        </DataTemplate>", orderType, columnName, viewName, selectedIndexMarkup);

        StringReader stringReader = new StringReader(markup);
        XmlReader xmlReader = XmlReader.Create(stringReader);
        return XamlReader.Load(xmlReader) as DataTemplate;
    }

0 个答案:

没有答案