在我的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;
}