C# 在wpf中更新ItemsSource后如何获取DataGrid行?

C# 在wpf中更新ItemsSource后如何获取DataGrid行?,c#,wpf,datagrid,C#,Wpf,Datagrid,在我的应用程序中,有一个datagrid,其中包括listbox作为datagrid单元格。在更新datagrid ItemsSource之后,我还想更新listbox ItemsSource private void DataUpdate() if (_dtWorkTime.Rows.Count > 0) { taskDetailGrid.ItemsSource = _dtWorkTime.DefaultView; taskDetailGrid.Items.Refre

在我的应用程序中,有一个datagrid,其中包括listbox作为datagrid单元格。在更新datagrid ItemsSource之后,我还想更新listbox ItemsSource

private void DataUpdate()
if (_dtWorkTime.Rows.Count > 0)
{
     taskDetailGrid.ItemsSource = _dtWorkTime.DefaultView;
     taskDetailGrid.Items.Refresh();
     taskDetailGrid.UpdateLayout();
     LisBoxDataUpdate(SelectContacts);
}
如上所述,在更新datagrid ItemsSource之后,还要更新到作为datagrid单元格的listbox的ItemsSource

private void LisBoxDataUpdate(ObservableCollection<ContactInfo> SelectContacts)
        {
            if (SelectContacts != null)
            {
                var row_list = GetDataGridRows(taskDetailGrid);
                foreach (DataGridRow single_row in row_list)
                {
                    if (single_row == null) break;
                    if (single_row.IsSelected == true)
                    {
                        ListBox memberGrid = FindChild<ListBox>(single_row, "memberListBox");
                        memberGrid.ItemsSource = SelectContacts;

                        Button btnMemberAdd = FindChild<Button>(single_row, "btnMemberAdd");

                        if (SelectContacts.Count <= 0)
                        {
                            memberGrid.Visibility = Visibility.Hidden;
                            btnMemberAdd.Visibility = Visibility.Visible;
                        }
                        else
                        {
                            memberGrid.Visibility = Visibility.Visible;
                            btnMemberAdd.Visibility = Visibility.Hidden;
                        }
                        break;
                    }
                }
            }
        }

public IEnumerable<DataGridRow> GetDataGridRows(DataGrid grid)
        {
            var itemsSource = grid.ItemsSource as IEnumerable;

            if (null == itemsSource)
            {
                yield return null;
            }

            foreach (var item in itemsSource)
            {
                var row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
                if (null != row)
                {
                    yield return row;
                }
            }
        }
private void LisBoxDataUpdate(ObservableCollection SelectContacts)
{
如果(选择联系人!=null)
{
var row_list=GetDataGridRows(taskDetailGrid);
foreach(行列表中的DataGridRow单行)
{
如果(单行==null)中断;
if(single_row.IsSelected==true)
{
ListBox memberGrid=FindChild(单行,“memberListBox”);
memberGrid.ItemsSource=选择联系人;
按钮btnMemberAdd=FindChild(单行,“btnMemberAdd”);

如果(SelectContacts.Count,DataGrid的默认值是加载项目,这意味着按需加载行

如果未渲染该项,则尚未生成该项

添加到数据网格:

EnableRowVirtualization="False"
VirtualizingStackPanel.IsVirtualizing="False" 

阅读此处的更多信息:

您能用dataGrid显示XAML代码吗?我用XAML代码编辑了我的问题。可以在这里找到解决方案。我引用了此网站并更新为答案2。但行变量仍然为空。我为每一行输入了不同值的itemssource,但所有的listbox itemssource都相同。怎么了?
EnableRowVirtualization="False"
VirtualizingStackPanel.IsVirtualizing="False"