[英]c# WPF MvvM application DataGrid not updating to the database
我正在使用 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();
}
您需要先將對象添加到 context.Ninjas 集合中,然后再調用 context.SaveChanges。
在實體框架中 - 假設 DbContext(代碼中的 NinjaApp_DatabaseEntities)是數據庫。 實際數據庫中的所有表將在此 DbContext 中顯示為列表(稱為實體的類)。
當您必須向表中添加記錄時,您創建一個行,該行必須為該表中的每一列都有一個值,然后將其插入。 同樣,在實體框架中,當您必須向表中添加新記錄時,您必須創建一個實體類型的對象。
從你的例子和評論 - 我想象表名是“忍者” - 因此你看到 context.ninjas
接下來,您要向該表“ninjas”添加一條記錄——這意味着您可以添加到其中的對象也必須是“ninjas”類的類型。
既然你有代碼,你必須代表表的類的實際類型,你必須創建它的一個新對象 - 分配值,然后將它添加到 context.ninjas.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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.