我使用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;
以下是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);
}
}
答案 0 :(得分:0)
如果您切换回来,您将切换到之前由DataGrid更新的内存中集合。或者您是否再次从dtb加载数据?
编辑:
好的,现在你已经发布了代码,我知道问题出在哪里。 我想,DataGrid没有刷新。确保,您将在属性UserList上引发NotifyProperyChanged。然后它会工作。请参阅ObservableCollection类。