【发布时间】:2017-03-23 18:44:48
【问题描述】:
我在 WPF 应用程序中有一个主窗口和一些子窗口。使用 MVVM 和 EF。 以下是层的简化概述:
- MainView:这里有一个 GridView 和一个保存按钮。
- MainViewmodel:具有 ObservableCollection 属性和用于保存的 DelegateCommand。
- ChildView:这里有一个 GridView 和一个保存按钮。
- ChildViewmodel:具有 ObservableCollection 属性和用于保存的 DelegateCommand。
- DataServices:使用提供 Entitytype1 和 Entitytype2 的 EF 模型
这是对代码的简化概述(对于子视图也是如此):
主视图中的 XAML
<Window>
<UserControl.DataContext>
<viewModel:MainViewModel/>
</UserControl.DataContext>
<Grid>
<GridView ItemsSource="{Binding MyEntityList}"/>
<Button Content="Save" Command="{Binding SaveCommand}"/>
</Grid>
</Window>
MainViewmodel 中的代码
public ObservableCollection<Entitytype1> MyEntityList { get; set; }
private void LoadData()
{
MyEntityList = new ObservableCollection<Entitytype1>(DataServices.GetData());
OnPropertyChanged("MyEntityList");
}
SaveCommand = new DelegateCommand(Save);
private void Save()
{
DataServices.SaveEntity1();
}
DataServices 中的代码 我在需要时创建了 EF 模型,我猜想在应用程序的整个生命周期中都有一个 EF。是个坏主意吗?
public static IList<EntityType1> GetData()
{
var list = new List<EntityType1>();
using (var myEntitiesModel = new MyEntitiesModel())
{
list = myEntitiesModel.EntityType1s.ToList();
}
return list;
}
public static SaveEntity1(?)
{
????
myEntitiesModel.SaveChanges();
}
一切正常,数据显示在主视图的网格中。
现在的问题是:如何将数据取回数据库?
当用户更改网格中的某些内容时,它会在 ObservableCollection 中使用绑定进行更改,很好。
但是当用户单击视图上的保存按钮时,如何将更改返回到 DataServices 中的 EF 模型,然后返回到数据库?
我想我可以在 DataServices 中创建一个方法,将 ObservableCollection 放入并对其进行 foreach 并将其中的项目与 EF 模型中的所有项目进行比较以找到更改的项目。
但这似乎不对,有什么更好的方法?
【问题讨论】:
标签: c# wpf entity-framework mvvm