2
我正在尝试使用Wpf DataGrid与实体框架的CRUD操作。 现有行可以成功修改,并且保存单击保存按钮更改时。当涉及新行时,实体框架SaveChanges出于某种原因不保存新行。我认为这很容易,但我不明白这里做错了什么。如何使用实体框架从DataGrid更新数据库
,我有以下页面中的WPF
<Page x:Class="TaxGroupsListing"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:wendbooksVatRatSetup"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Title="TaxGroupsListing">
<Page.DataContext>
<local:TaxGroupListingVM x:Name="test"></local:TaxGroupListingVM>
</Page.DataContext>
<DockPanel >
<Button Margin="2" DockPanel.Dock="Top" Content="Load" Command="{Binding Path=LoadCmd}"></Button>
<Button Margin="2" DockPanel.Dock="Top" Content="Save" Command="{Binding Path=SaveCmd}"></Button>
<DataGrid IsSynchronizedWithCurrentItem="True" Margin="2" CanUserAddRows="True"
ItemsSource="{Binding Groups,UpdateSourceTrigger=PropertyChanged}">
</DataGrid>
</DockPanel>
而视图模型如下图所示
Public Class TaxGroupListingVM : Implements INotifyPropertyChanged
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Sub notify()
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(String.Empty))
End Sub
Property Groups As New ObservableCollection(Of TaxGroup)
Property LoadCmd As New mycommad(AddressOf LoadData)
Property SaveCmd As New mycommad(AddressOf SaveData)
Private db As New SQlDataBaseEntities
Private Sub SaveData()
db.SaveChanges()
LoadData()
End Sub
Private Sub LoadData()
Dim qry = From g As TaxGroup In db.TaxGroups Select g
Groups = New ObservableCollection(Of TaxGroup)
For Each item In qry
Groups.Add(item)
Next
notify()
End Sub
End Class
谢谢,我想过这个,之前我看了你的答案我尝试用这种方式,而是让我只是为了好奇才问你一些事情。 由于实体框架是一种较新的技术,不应该立即提供此功能吗? 我的意思是在DataTables中 - DataViews这个功能已经存在,如果你设置了正确的变量CommandBuilders等等。新的行或删除的行会自动更新。 – user2160275
那么我知道有一些第三方库确实具有这种类型的集成(例如DevExpress),但我个人不希望.NET DataGrid具有此功能。它会在DataGrid和EF之间创建一个不需要的依赖关系,IMO。但是,自己继承并实现它并没有太多的工作,这样,DbContext和DataGrid之间的依赖关系就会成为您自己的(甚至是在数据源集合中)。很高兴你的工作虽然。 –