我正在尝试从DataGrid表中的可编辑组合框获取单元格值。当从选项中选择一个项目时,将成功/正确地提取值,但是当用户在组合框中输入文本时,则不能成功提取这些值(除非他们双击)
问题:RowIndex变为-1(在单击一次单击文本输入时),就好像未选择行一样,导致代码失败并错误地处理了更新。 >
我该如何解决?如果强迫用户双击是有效的选项,我该怎么做?
这是我的C#代码:
QuickFix.FIX43.MarketDataSnapshotFullRefresh
这是我的专栏的XAML代码:
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) { }
}
}
}
答案 0 :(得分:1)
不确定自己在做什么,但是如果您只想阅读Text
中的ComboBox
,只需使用发件人即可!
private void ComboBox_LostFocus(Object sender, RoutedEventArgs e)
{
var comboBox = sender as ComboBox;
if (comboBox != null)
{
int id;
if(int.TryParse(comboBox.Text, out id))
{
// do your thing!!!!
}
}
}
要获取索引,可以使用以下帮助方法:
public static DependencyObject GetParent<T>(DependencyObject child)
{
if (child == null) return null;
var parent = VisualTreeHelper.GetParent(child);
return parent is T ? parent : GetParent<T>(parent);
}
用法:
var index = ((DataGridRow)GetParent<DataGridRow>(comboBox))?.GetIndex();