我想将值和列索引传递给一种方法,该方法将以编程方式选择DataGrid控件中与给定列中的值匹配的行。
我的代码是这样的:
private void HighlightSelections(string selection, int colIndex)
{
mtoDG.UnselectAll();
for(int i = 0; i < mtoDG.Items.Count; i++)
{
DataGridRow row = mtoDG.ItemContainerGenerator.ContainerFromIndex(i) as DataGridRow;
if (mtoDG.Columns[colIndex].GetCellContent(row) is TextBlock cellContent && cellContent.Text.Equals(selection))
{
object item = mtoDG.Items[i];
mtoDG.SelectedItems.Add(item);
}
}
}
我发现只有在屏幕上显示整个数据网格时,此方法才有效。如果由于空间限制而有未显示的行,则将引发nullexception错误。
所以我的问题是,即使显示区域中有看不见的行,我也可以更改代码以使其正常工作吗?
答案 0 :(得分:0)
首先,通过添加\y.y
处理((M B) (M B))
:
(\y.y \y.y)
第二,订阅\y.y
事件以刷新ArgumentNullException
:
row != null
答案 1 :(得分:0)
这里的一个好的解决方案是让DataContext的行具有IsSelected属性,然后应该将其与IsSelected行绑定,之后就可以设置DataContext属性,并且一切都可以了,因为DataContext始终具有有效项。
答案 2 :(得分:0)
我认为您需要首先找出导致ArgumentNullException的原因。禁用DataGrid虚拟化功能可能会有所帮助。