【问题标题】:Data grid is not updating after setting item source to null将项目源设置为 null 后数据网格未更新
【发布时间】:2016-04-18 19:38:35
【问题描述】:

我有一个绑定到可观察集合的数据网格,当我更新可观察集合中的项目时,数据网格不会更新。我知道我通知不会触发,因为我没有只更改属性集合,所以我试图将项目源设置为 null 并在它检查更新后重新绑定它,但这不起作用。我也试过 items.refresh 无济于事。我发现唯一可行的方法是重新导航回 PendingChanges 页面。

了解其工作原理。我有一个窗口,其中有一个页面,底部是一个框在其中的窗口,当您单击一个按钮时,它会导航到包含数据网格的窗口(待更改)

包含数据网格的类和页面

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();
}

【问题讨论】:

  • 清空后,您是否尝试过调用 Datagrid.Items.Refresh();

标签: c# wpf


【解决方案1】:

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

试试这个:

PendingChanges _pendingChangesPage;

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

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

【讨论】:

    【解决方案2】:

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

    dataGrid.Items.Refresh();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      相关资源
      最近更新 更多