数据网格不会立即更新

本文关键字:更新 数据网 网格 数据 | 更新日期: 2023-09-27 18:37:14

在我的程序中,我有一个通过MVVM实现的DataGrid。在这个DataGrid旁边是一个按钮,用于执行我命名的命令"向下填充"。它采用其中一列并将字符串复制到该列中的每个单元格。问题是视图不会进行更改,直到我更改页面,然后返回带有DataGrid的页面。为什么会发生这种情况,我该怎么做才能解决它?

XAML:

<Button Command="{Binding FillDown}" ... />
<DataGrid ItemsSource="{Binding DataModel.Collection}" ... />

视图模型:

private Command _fillDown;
public ViewModel()
{
     _fillDown = new Command(fillDown_Operations);
}
//Command Fill Down
public Command FillDown { get { return _fillDown; } }
private void fillDown_Operations()
{
    for (int i = 0; i < DataModel.NumOfCells; i++)
    {
        DataModel.Collection.ElementAt(i).cell = "string";
    }
    //**I figured that Notifying Property Change would solve my problem...
    NotifyPropertyChange(() => DataModel.Collection);
}

- 请让我知道您是否还有您想看到的代码。

是的,对不起,我的收藏是一个ObservableCollection

数据网格不会立即更新

在属性的集合器中调用 NotifyPropertyChanged():

public class DataItem
{
   private string _cell;
   public string cell //Why is your property named like this, anyway?
   {
       get { return _cell; }
       set
       {
           _cell = value;
           NotifyPropertyChange("cell");
           //OR
           NotifyPropertyChange(() => cell); //if you're using strongly typed NotifyPropertyChanged.
       }
   }
}

侧面评论:

更改此内容:

for (int i = 0; i < DataModel.NumOfCells; i++)
{
    DataModel.Collection.ElementAt(i).cell = "string";
}

对此:

foreach (var item in DataModel.Collection)
    item.cell = "string";

这更干净易读。