我在WPF應用程序中有一個主窗口和一些子窗口。使用MVVM和EF。 這裏是在層的簡要概述:從WPF中的視圖更新EF模型
- 的MainView:在這裏我有一個GridView和保存按鈕。
- MainViewmodel:具有ObservableCollection屬性和DelegateCommand用於保存。
- ChildView:這裏有一個GridView和一個保存按鈕。
- ChildViewmodel:具有ObservableCollection屬性和一個DelegateCommand用於保存。
- DataService的:與EF模型提供Entitytype1和Entitytype2
這裏是在代碼的簡化概述(同爲子視圖):在的MainView
<Window>
<UserControl.DataContext>
<viewModel:MainViewModel/>
</UserControl.DataContext>
<Grid>
<GridView ItemsSource="{Binding MyEntityList}"/>
<Button Content="Save" Command="{Binding SaveCommand}"/>
</Grid>
</Window>
XAML
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();
}
所有這些工作正常,數據顯示在Mainview的網格中。
現在問題:如何將數據返回到數據庫?
當用戶更改網格中的某些內容時,它會在ObservableCollection中使用綁定更改,這很好。
但是,當用戶單擊視圖上的保存按鈕時,如何將更改返回到DataServices中的EF模型,並返回到數據庫?
我想我可以在DataServices中使用ObservableCollection並對其進行foreach並將其中的項目與EF模型中的所有項目進行比較以找到更改的項目。
但這似乎不對,什麼是更好的方法?
因此,如果客戶端具有View(MainView)和DAL(DataServices)以及EF Model,您將如何從View查看到DAL的更改數據? –
視圖模型在命令的Execute方法中調用服務層或DAL。視圖綁定到視圖模型。 – mm8
正如我所建議的那樣:我想我可以在DataServices中創建一個方法,將ObservableCollection引入並對其進行foreach,並將其中的項目與EF模型中的所有項目進行比較以找到更改的項目。 –