添加一些记录时刷新我的数据网格(WPF mvvm和ef)(Refresh my datagrid when add some records(WPF mvvm and ef))

编程入门 行业动态 更新时间:2024-10-26 02:34:33
添加一些记录时刷新我的数据网格(WPF mvvm和ef)(Refresh my datagrid when add some records(WPF mvvm and ef))

简介我是WPF和mvvm的新手,因此我尝试通过应用库存管理来掌握基础知识。

达意堆栈

实体框架数据库首先 WPF MVVM

问题描述

Add或Delete操作不会自动更新我的datagrid不会自动更新。

我在论坛上阅读了很多东西,但无所事事。

ArticleViewModel

Class ArticleViewModel { private GStockEntities context; public ArticleViewModel() { context = new GStockEntities(); } public ObservableCollection<article> GetAllArticle() { ObservableCollection<article> Article = new ObservableCollection<article>(); try { var query = (from a in context.articles select a).ToList(); foreach (var item in query) { Article.Add(item); } } catch (Exception) { throw; } return Article; } public ObservableCollection<article> Article { get { return this.GetAllArticle(); } set { Set(ref _Article, value); } } private void Add() { article Article = new article(); Article.id_article = id; Article.nom = nom_Article; Article.id_categorie = GetIdCategoriByName(nom_categorie); Article.quantite = (int)qt; Article.prix_achat = (decimal)prix_achat; Article.prix_vente = (decimal)prix_vente; context.articles.Add(Article); context.SaveChanges(); } }

ViewModelBase

class ViewModelBase : INotifyPropertyChanged, INotifyDataErrorInfo { public ViewModelBase() { } #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; public void Notify([CallerMemberName]string propertyName = null) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } protected bool Set<TProperty>(ref TProperty attrib, TProperty value, [CallerMemberName]string propertyName = null) { if (!object.Equals(attrib, value)) { OnPropertyChanging(propertyName, attrib, value); attrib = value; Notify(propertyName); OnPropertyChanged(propertyName); return true; } return false; } protected virtual void OnPropertyChanged(string propertyName) { } protected virtual void OnPropertyChanging(string propertyName, object oldValue, object newValue) { } #endregion

}

ArticleView

<DataGrid DockPanel.Dock="Right" AutoGenerateColumns="False" Name="ArtDatagrid" ItemsSource="{Binding Article}" SelectedItem="{Binding SelectedArticle}" CanUserAddRows="True"> <DataGrid.Columns> <DataGridTextColumn Header="Id" Binding="{Binding id_article}" Width="*"/> <DataGridTextColumn Header="Nom" Binding="{Binding nom}" Width="*"/> <DataGridTextColumn Header="Nom de la categorie" Binding="{Binding nom_categorie}" Width="*"/> <DataGridTextColumn Header="QT" Binding="{Binding quantite}" Width="*"/> <DataGridTextColumn Header="Prix d'achat" Binding="{Binding prix_achat}" Width="*"/> <DataGridTextColumn Header="prix de vente" Binding="{Binding prix_vente}" Width="*"/> </DataGrid.Columns> </DataGrid> </DockPanel>

Introduction I am new in WPF and mvvm and therefore I try to master the basics by making a application of inventory management.

Tech-Stack

Entity Framework database first WPF MVVM

Problem Description

An Add or Deleteoperation doesn't automatically updates my datagriddoesn't automatically updated.

I read lots of stuff on forums but nothing to do.

Code

ArticleViewModel

Class ArticleViewModel { private GStockEntities context; public ArticleViewModel() { context = new GStockEntities(); } public ObservableCollection<article> GetAllArticle() { ObservableCollection<article> Article = new ObservableCollection<article>(); try { var query = (from a in context.articles select a).ToList(); foreach (var item in query) { Article.Add(item); } } catch (Exception) { throw; } return Article; } public ObservableCollection<article> Article { get { return this.GetAllArticle(); } set { Set(ref _Article, value); } } private void Add() { article Article = new article(); Article.id_article = id; Article.nom = nom_Article; Article.id_categorie = GetIdCategoriByName(nom_categorie); Article.quantite = (int)qt; Article.prix_achat = (decimal)prix_achat; Article.prix_vente = (decimal)prix_vente; context.articles.Add(Article); context.SaveChanges(); } }

ViewModelBase

class ViewModelBase : INotifyPropertyChanged, INotifyDataErrorInfo { public ViewModelBase() { } #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; public void Notify([CallerMemberName]string propertyName = null) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } protected bool Set<TProperty>(ref TProperty attrib, TProperty value, [CallerMemberName]string propertyName = null) { if (!object.Equals(attrib, value)) { OnPropertyChanging(propertyName, attrib, value); attrib = value; Notify(propertyName); OnPropertyChanged(propertyName); return true; } return false; } protected virtual void OnPropertyChanged(string propertyName) { } protected virtual void OnPropertyChanging(string propertyName, object oldValue, object newValue) { } #endregion

}

ArticleView

<DataGrid DockPanel.Dock="Right" AutoGenerateColumns="False" Name="ArtDatagrid" ItemsSource="{Binding Article}" SelectedItem="{Binding SelectedArticle}" CanUserAddRows="True"> <DataGrid.Columns> <DataGridTextColumn Header="Id" Binding="{Binding id_article}" Width="*"/> <DataGridTextColumn Header="Nom" Binding="{Binding nom}" Width="*"/> <DataGridTextColumn Header="Nom de la categorie" Binding="{Binding nom_categorie}" Width="*"/> <DataGridTextColumn Header="QT" Binding="{Binding quantite}" Width="*"/> <DataGridTextColumn Header="Prix d'achat" Binding="{Binding prix_achat}" Width="*"/> <DataGridTextColumn Header="prix de vente" Binding="{Binding prix_vente}" Width="*"/> </DataGrid.Columns> </DataGrid> </DockPanel>

最满意答案

因为您将新创建的文章添加到数据库,但不添加到绑定到网格的ObservableCollection 。 一种解决方案可能是不直接在getter中从数据库返回文章。 相反,您可以使用局部变量来存储它们:

private ObservableCollection<article> _article public ObservableCollection<article> Article { get { if (_article == null) _article = this.GetAllArticle(); return _article; } }

然后,您可以在add方法中使用该集合:

private void Add() { article Article = new article(); Article.id_article = id; Article.nom = nom_Article; Article.id_categorie = GetIdCategoriByName(nom_categorie); Article.quantite = (int)qt; Article.prix_achat = (decimal)prix_achat; Article.prix_vente = (decimal)prix_vente; context.articles.Add(Article); context.SaveChanges(); _article.Add(Article); }

Because you add the new created article to the database but not to the ObservableCollection that is bound to the grid. One solution could be not to return the articles from the database directly in the getter. Instead you could use a local variable to store them:

private ObservableCollection<article> _article public ObservableCollection<article> Article { get { if (_article == null) _article = this.GetAllArticle(); return _article; } }

Then you can use that collection in the add method:

private void Add() { article Article = new article(); Article.id_article = id; Article.nom = nom_Article; Article.id_categorie = GetIdCategoriByName(nom_categorie); Article.quantite = (int)qt; Article.prix_achat = (decimal)prix_achat; Article.prix_vente = (decimal)prix_vente; context.articles.Add(Article); context.SaveChanges(); _article.Add(Article); }

更多推荐

本文发布于:2023-08-02 19:10:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1380637.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:网格   数据   mvvm   WPF   ef

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!