私は自分の特定のシナリオの解決策を見つけました。上記の前回の更新のリンクから、DataGridComboBoxColumnサブクラスが含まれているカスタムマルチカラムComboBoxをダウンロードしました。基本的に、これをEntity Framework Code-First POCOで機能させたところ、問題は解決しました。これが、POCOで機能させるために私がしなければならなかったことです。
CustDataGridComboBoxColumnの内部には、いくつかのオーバーライドがあります。次の2つのオーバーライドをわずかに変更する必要があります。コントロールからのプロパティがわからないため、リフレクションを使用してプロパティの設定を変更しています。
元の実装は、SelectedValuePathを使用してDataRowViewから正しい行を取得することでこれを実現しました。
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;
}
}
提供された意見と回答に感謝します。申し訳ありませんが、最初はもっと意味のある質問を適切に表現することができませんでした。