Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将项源设置为null后,数据网格未更新_C#_Wpf - Fatal编程技术网

C# 将项源设置为null后,数据网格未更新

C# 将项源设置为null后,数据网格未更新,c#,wpf,C#,Wpf,我有一个绑定到可观察集合的datagrid,当我更新可观察集合中的项时,数据网格不会更新。我知道我不会触发notify,因为我没有更改集合,只是更改属性,所以我尝试将项目源设置为null,并在检查更新后重新绑定它,但这不起作用。我还尝试了items.refresh,但没有效果。我发现唯一有效的方法是重新激活PendingChanges页面 了解这是如何工作的。我有一个窗口,其中有一个页面,在底部是一个框架窗口,当您单击按钮时,它会导航到包含datagrid的窗口(待定更改) 包含数据网格的类和页

我有一个绑定到可观察集合的datagrid,当我更新可观察集合中的项时,数据网格不会更新。我知道我不会触发notify,因为我没有更改集合,只是更改属性,所以我尝试将项目源设置为null,并在检查更新后重新绑定它,但这不起作用。我还尝试了items.refresh,但没有效果。我发现唯一有效的方法是重新激活PendingChanges页面

了解这是如何工作的。我有一个窗口,其中有一个页面,在底部是一个框架窗口,当您单击按钮时,它会导航到包含datagrid的窗口(待定更改)

包含数据网格的类和页面

public PendingChanges(page blahh)
{
   InitializeComponent();
   Datagrid.ItemsSource = obvs_collection;
}
public string GetPendingChanges()
{
    PopulatePendingChanges();
    return NumberOfItemsPending + " items checked out";
}
private void PopulateCollection()
{
    //obvs_collection.Clear();  this doesn't work
    //Datagrid.ItemsSource = null this doesn't work 
    foreach (var path in localPath)
    {
        obvs_collection.Add(new PendingItem()
        {
            ID = blah.Replace("\\",""),
            Path = path.ToString()
        });
    }
}
private void CheckChanges()
{
    _pendingChangesPage = new PendingChanges(blah);
    PendingChangesTb.Text = _pendingChangesPage.GetPendingChanges();
}
使用数据网格在页面中设置框架的类/页面

public PendingChanges(page blahh)
{
   InitializeComponent();
   Datagrid.ItemsSource = obvs_collection;
}
public string GetPendingChanges()
{
    PopulatePendingChanges();
    return NumberOfItemsPending + " items checked out";
}
private void PopulateCollection()
{
    //obvs_collection.Clear();  this doesn't work
    //Datagrid.ItemsSource = null this doesn't work 
    foreach (var path in localPath)
    {
        obvs_collection.Add(new PendingItem()
        {
            ID = blah.Replace("\\",""),
            Path = path.ToString()
        });
    }
}
private void CheckChanges()
{
    _pendingChangesPage = new PendingChanges(blah);
    PendingChangesTb.Text = _pendingChangesPage.GetPendingChanges();
}

更新任何数据源以反映其更改时,需要使用其.referesh()函数刷新网格

dataGrid.Items.Refresh();

我想您可能只需要一个实例,而不是每次检查更改时都创建一个新实例

试试这个:

PendingChanges _pendingChangesPage;

public PendingChanges(page blahh)
{
   InitializeComponent();
   Datagrid.ItemsSource = obvs_collection;
   _pendingChangesPage = new PendingChanges(blah);
}

private void CheckChanges()
{
    PendingChangesTb.Text = _pendingChangesPage.GetPendingChanges();
}

将其置零后,是否尝试调用Datagrid.Items.Refresh();