Я создаю столбцы datagrid динамически на основе проанализированного файла csv. По сути, я следую методу here, однако я использую DataGridTemplateColumn, поскольку мне нужно указать комбо как элемент управления редактирования.wpf datagrid single click edit с DataGridTemplateColumn не работает
Я также хочу иметь один клик редактирования, и я следую за технику, предложенную в этой статье here by Julie Lerman, который обвила комбо в сетке и использовали FocusManager.FocusedElement для установки фокуса.
Я делаю это в ViewModel и код, чтобы создать комбинированный элемент выглядит следующим образом:
private static FrameworkElementFactory CreateComboElement(int columnIndex, List<string> fieldNameMappings)
{
//note we create the combo in a grid and use the FocusManager to get focus on 1 click!
//so first the grid
FrameworkElementFactory gridElement = new FrameworkElementFactory(typeof(Grid));
Binding gridBinding = new Binding();
gridBinding.ElementName = "combo";
gridElement.SetValue(System.Windows.Input.FocusManager.FocusedElementProperty, gridBinding);
//now the combo
FrameworkElementFactory cboElement = new FrameworkElementFactory(typeof(ComboBox));
gridElement.AppendChild(cboElement);
//set the ItemsSource on the combo
Binding comboBinding = new Binding();
comboBinding.Source = fieldNameMappings;
cboElement.SetBinding(ComboBox.ItemsSourceProperty, comboBinding);
cboElement.SetValue(ComboBox.NameProperty, "combo");
cboElement.SetValue(ComboBox.IsSynchronizedWithCurrentItemProperty, false);
//now set the binding for the selected vlaue in the combo
Binding selectedBinding = new Binding(string.Format("Properties[{0}].Value", columnIndex));
cboElement.SetBinding(ComboBox.SelectedItemProperty, selectedBinding);
return gridElement;
}
Проблема заключается в том, один клик редактирования не работает и во время выполнения я вижу следующее ошибка после 2 клика, которая все еще требуется для вызова редактирования:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=combo'. BindingExpression:(no path); DataItem=null; target element is 'Grid' (Name=''); target property is 'FocusedElement' (type 'IInputElement')
Что случилось, почему это один щелчок не работает?