C# 在wpf中更新ItemsSource后如何获取DataGrid行?
在我的应用程序中,有一个datagrid,其中包括listbox作为datagrid单元格。在更新datagrid ItemsSource之后,我还想更新listbox ItemsSourceC# 在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
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"