簡體   English   中英

c# WPF MvvM 應用程序DataGrid 未更新到數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM