c#WPF MvvM应用程序DataGrid未更新到数据库



我正在使用MvvM-Light开发一个WPF应用程序。我已经为我的DataGrid创建了一个数据绑定,当我在那里编辑某些内容时,它不会更新到数据库,我不确定哪里出了问题。

这是我的视图代码:

<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:NinjaApp_V2.Views"
xmlns:ViewModel="clr-namespace:NinjaApp_V2.ViewModel" xmlns:NinjaApp_V2="clr-namespace:NinjaApp_V2" x:Name="NinjaCRUDWindow" x:Class="NinjaApp_V2.Views.NinjaCRUD"
mc:Ignorable="d"
Title="NinjaCRUD" Height="300" Width="300">
<Window.Resources>
<CollectionViewSource x:Key="ninjaViewSource" d:DesignSource="{d:DesignInstance {x:Type NinjaApp_V2:ninja}, CreateList=True}"/>
</Window.Resources>
<Window.DataContext>
<Binding Path="AddNinja" Source="{StaticResource Locator}"/>
</Window.DataContext>
<Grid DataContext="{Binding Source={StaticResource Locator}}" Margin="0,10,3.6,0.4">
<DataGrid x:Name="DataGridNinjas" ItemsSource="{Binding Ninjas.Ninjas}">
<DataGrid.ItemBindingGroup>
<BindingGroup/>
</DataGrid.ItemBindingGroup>
</DataGrid>
<Button Command="{Binding SaveCommand}" CommandParameter="{Binding ElementName=AddWindow}" Margin="0,180,211,0">Save</Button>
</Grid>

该视图的.cs完全是空的,正如我在多个示例中看到的那样。

AddNinjaVM包含SaveCommand,看起来像这样:

using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using NinjaApp_V2.Views;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace NinjaApp_V2.ViewModel
{
public class AddNinjaVM : ViewModelBase
{
public NinjaVM Ninja { get; set; }
public ICommand SaveCommand { get; set; }
private NinjaListVM _ninjas;
public AddNinjaVM(NinjaListVM ninjas)
{
_ninjas = ninjas;
Ninja = new NinjaVM();
SaveCommand = new RelayCommand<NinjaCRUD>(Save);
}
private void Save(NinjaCRUD obj)
{
using (var context = new NinjaApp_DatabaseEntities())
{
context.SaveChanges();
}
_ninjas.Ninjas.Add(Ninja);
obj.Hide();
}
}
}

为此,我以学校为榜样。这是我已经坚持了第二天的部分,我只是不明白为什么它在我的应用程序中不起作用。也许有人能帮我一下吗?

private void Save(NinjaCRUD obj)
{
using (var context = new NinjaApp_DatabaseEntities())
{
**context.<DBtable>.Add(obj);**
context.SaveChanges(); <---- This is where it is wrong.
}
_ninjas.Ninjas.Add(Ninja);  
obj.Hide();
}

您需要将对象添加到上下文中。先调用Ninjas集合,然后调用上下文。保存更改。

实体框架概念

在实体框架中,假设DbContext(代码中的NinjaApp_DatabaseEntities)是数据库。实际数据库中的所有表都将在此DbContext中显示为列表(称为实体的类)。

当您必须向表中添加一条记录时,您需要创建一行,该行必须为该表中的每一列都有一个值,然后插入该行。类似地,在实体框架中,当您必须向表中添加一个新记录时,您必须创建一个实体类型的对象。

从你的例子&comments-我认为表名是"ninjas"-因此您可以看到context.ninjas

接下来,您要将一条记录添加到这个表"ninjas"中,这意味着您可以添加到其中的对象也必须是"ninjas"类的类型。

既然有了代码,就必须使用表示该表的类的实际类型,并且必须为其创建一个新对象-赋值,然后将其添加到context.nijas.Add()中,最后调用context。SaveChanges();

参考:http://www.entityframeworktutorial.net/EntityFramework4.3/add-entity-using-dbcontext.aspx

//create DBContext object
using (var dbCtx = new SchoolDBEntities())
{
//Add Student object into Students DBset
dbCtx.Students.Add(newStudent);
// call SaveChanges method to save student into database
dbCtx.SaveChanges();
}

最新更新