WPF DataGrid会自动更新内存中的数据吗?

时间:2016-03-22 09:22:23

标签: wpf mvvm datagrid

我使用WPF和MVVM模式开发桌面应用程序。也许我不清楚DataGrid控件如何工作,但如果我修改了一个项目(文本,复选框等),即使我没有创建任何永久数据库,修改仍然存在更新(使用Entity Framework)。例如,我可以切换到查看不同的数据,当我回来查看具有修改数据的网格(但不保存到db)时,更改就在那里。不知何故,内存数据已被DataGrid控件更改,并且未刷新或与数据库同步。

换句话说,DataGrid中的数据一直被修改,直到我停止并从visual studio重新运行它。

  • 更新: 提出这个问题的另一种方法是:当我更新一个DataGrid的项目时会发生什么?如果它以双向模式绑定到ViewModel的属性P,那么我认为P将被更新。但即使我刷新它的值(将P设置为null然后再次调用数据访问方法),修改后的数据仍然存在。

有人知道发生了什么吗?

谢谢!

更新2: 下面是xaml代码,它将DataGrid绑定到ViewModel中名为UserList的属性。



<DataGrid
          x:Name="UserList"
          ItemsSource="{Binding UserList, Mode=TwoWay}"
          AutoGenerateColumns="False"
          AllowDrop="True"
          RowBackground="Orange"
          AlternatingRowBackground="#FFC4B0B0">
  <!-- define columns to view -->
  <DataGrid.Columns>
    ...
  </DataGrid.Columns>
</DataGrid>
&#13;
&#13;
&#13;

以下是ViewModel中运行的代码。方法InitialiseData()在VM的构造函数中调用,在我想用持久数据执行其他操作之前,所以我认为它总是刷新。

private void InitialiseData()
{
     // Retrieves user list from the business layer's response
     Response userList = _userBL.GetUserList();

 if (userList is FailResponse)
 {
     MessageBox.Show(userList.Message);
     return;
 }
 else
 {
     UserList = null;          
     UserList = (IEnumerable<User>)((SuccessResponse)userList).Data;
 }

**更新3 **:

private IEnumerable<User> _userList;
public IEnumerable<User> UserList
{
    get
    {
        return _userList;
    }

    set
    {
        _userList = value;
        NotifyOfPropertyChange(() => UserList);
    }
}

1 个答案:

答案 0 :(得分:0)

如果您切换回来,您将切换到之前由DataGrid更新的内存中集合。或者您是否再次从dtb加载数据?

编辑:

好的,现在你已经发布了代码,我知道问题出在哪里。 我想,DataGrid没有刷新。确保,您将在属性UserList上引发NotifyProperyChanged。然后它会工作。请参阅ObservableCollection类。