Я пытаюсь получить значение ячейки из редактируемого ComboBox в таблице DataGrid. Значения успешно / правильно выбираются, когда элемент выбирается из параметра, но не когда пользователь вводит текст в поле со списком (если они не дважды щелкают)
Проблема: RowIndex становится равным -1 (при вводе текста одним щелчком мыши), как будто строка не выбрана, что приводит к сбою кода и неправильной обработке обновления.
Как я могу это исправить? Если принудительное использование пользователем двойного щелчка является допустимым вариантом, как мне это сделать?
Вот мой код C #:
private void ComboBox_LostFocus(object sender, RoutedEventArgs e)
{
if (e != null)
{
TextBox t = e.Source as TextBox;
if (t != null)
{
try
{
int RowIndex = MYGRID.Items.IndexOf(MYGRID.SelectedItem);
if (RowIndex < 0)
{
MessageBox.Show("Index < 0"); //For Testing
}
//Obtain new Value
string Value = t.Text.ToString();
//Obtain item ID
DataGridRow Row = (DataGridRow)MYGRID.ItemContainerGenerator.ContainerFromIndex(RowIndex);
DataGridCell RowColumn = MYGRID.Columns[0].GetCellContent(Row).Parent as DataGridCell;
int ID = Convert.ToInt32(((TextBlock)RowColumn.Content).Text);
//Unrelated code continues...
}
catch (Exception) { }
}
}
}
Вот мой код XAML для столбца:
<DataGridTemplateColumn x:Name="ValueCol" Header="Value">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Options, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding Path=UpdatedData, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}" IsEditable="True" LostFocus="ComboBox_LostFocus" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>