【发布时间】:2016-03-23 17:10:07
【问题描述】:
我正在使用 WPF 和 MVVM 模式来开发桌面应用程序。也许我不清楚DataGrid 控件是如何工作的,但是如果我修改一个项目(文本、复选框等),即使我没有进行任何永久数据库更新(使用Entity Framework )。例如,我可能会切换到查看不同的数据,当我回来查看带有修改数据的网格时(但没有保存到 db),变化就在那里。不知何故,内存中的数据已被 DataGrid 控件更改,并且未刷新或与数据库同步。
换句话说,DataGrid 中的数据一直被修改,直到我停止并从 Visual Studio 重新运行它。
- 更新:
提出这个问题的另一种方法是:当我更新一个
DataGrid的项目时,实际上会发生什么?如果它以双向模式绑定到 ViewModel 的属性P,那么我想P将被更新。但即使我刷新它的值(将 P 设置为 null 然后再次调用数据访问方法),修改后的数据仍然存在。
有人知道发生了什么吗?
谢谢!
更新 2:
这是将 DataGrid 绑定到 ViewModel 中名为 UserList 的属性的 xaml 代码。
<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>
这是在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);
}
}
【问题讨论】: