Я нашел решение для моего конкретного сценария.Я загрузил пользовательский многоколоночный ComboBox с включенным подклассом DataGridComboBoxColumn по ссылке в моем последнем обновлении выше.По сути, я только что сделал эту работу с POCO Entity Framework Code-First, и это решило мою проблему.Вот что я должен был сделать, чтобы он работал с POCO.
Внутри CustDataGridComboBoxColumn есть несколько переопределений.Вам просто нужно немного изменить следующие два переопределения.Я использую отражение, чтобы изменить набор свойств, так как я не знаю, что это будет из элемента управления.
Исходная реализация достигла этого, получив правильную строку из DataRowView с SelectedValuePath.
protected override object PrepareCellForEdit(FrameworkElement editingElement, RoutedEventArgs editingEventArgs)
{
DataGridCell cell = editingEventArgs.Source as DataGridCell;
if (cell != null)
{
// Changed to support EF POCOs
PropertyInfo info = editingElement.DataContext.GetType().GetProperty("YourPropertyName", BindingFlags.Public | BindingFlags.Instance);
object obj = info.GetValue(editingElement.DataContext, null);
comboBox.SelectedValue = obj;
}
return comboBox.SelectedItem;
}
protected override bool CommitCellEdit(FrameworkElement editingElement)
{
// Dynamically set the item on our POCO (the DataContext).
PropertyInfo info = editingElement.DataContext.GetType().GetProperty(“YourPropertyName”, BindingFlags.Public | BindingFlags.Instance);
info.SetValue(editingElement.DataContext, comboBox.SelectedValue, null);
return true;
}
Кроме того, если вы собираетесь полностью создать этот пользовательский элемент управления в коде, а не в XAML,вам нужно будет добавить установщик в свойство Columns, потому что по умолчанию оно установлено только для чтения.
//The property is default and Content property for CustComboBox
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ObservableCollection<DataGridTextColumn> Columns
{
get
{
if (this.columns == null)
{
this.columns = new ObservableCollection<DataGridTextColumn>();
}
return this.columns;
}
set
{
this.columns = value;
}
}
Спасибо за предоставленные представления и ответы.Извините, я не смог адекватно сформулировать вопрос, чтобы придать ему больше смысла.