当前位置: 首页 > news >正文

WPFC#超市管理系统(3)商品管理

超市管理系统

    • 6. 商品管理
      • 6.1 添加商品
      • 6.1 商品管理主界面
      • 6.3 修改商品


6. 商品管理

  • 将前文中的GoodsView全部改成和数据库一致的ProductView
  • 新增枚举类型商品类型ProductType.cs
namespace 超市管理系统.Enums
{public enum ProductType{水果类,休闲食品类,粮油类,饮料类,日用品}
}
  • 新增枚举类型商品单位UnitType.cs
namespace 超市管理系统.Entity
{public enum UnitType{,,,,,,}
}

6.1 添加商品

  • 将数据库Product表的Category从int改为nvarchar(50),在Visual Studio中删掉Product表并从模型更新新表
  • 新增AddProductView.xaml,复用AddCustomerView.xaml并修改,新增加ImageSource属性和上传图片的SelectImageCommand命令。
  • AddCustomerViewModel内增加SupplierList属性SupplierList属性supplierProvider字段supplierProvider字段用于添加商品界面初次打开时加载当前现有供应商,并赋值给SupplierList属性SupplierList属性为Combox的当前选择项。
  • 单价虽然为double类型,但是输入框中无法输入小数点,需要将UpdateSourceTrigger设置为LostFocus,因为PropertyChanged是立即更新,不认小数点。而失去焦点时更新可以有小数点。
<Window x:Class="超市管理系统.View.AddProductView"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:超市管理系统.View"mc:Ignorable="d"xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"WindowStartupLocation="CenterScreen"DataContext="{Binding Source={StaticResource Locator}, Path=AddProductViewModel}"Title="商品管理" Height="450" Width="650"><i:Interaction.Triggers><i:EventTrigger EventName ="Loaded"><i:InvokeCommandAction Command="{Binding LoadedCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/></i:EventTrigger></i:Interaction.Triggers><Grid><Grid.RowDefinitions><RowDefinition Height="auto"/><RowDefinition/><RowDefinition Height="auto"/></Grid.RowDefinitions><Grid Grid.Row="0" Height="50" Background="{Binding AppData.Background}"><!--TextBlock设置height时,VerticalAlignment不生效,此地设置给grid--><TextBlock Text="商品管理" FontSize="24" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/></Grid><Grid Grid.Row="1"><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><StackPanel Grid.Row="0" Margin="10" HorizontalAlignment="Center" ><StackPanel Orientation="Horizontal" Height="30" Margin="0 5 0 10"><TextBlock Text="供应商:" Width="70" FontSize="18" VerticalAlignment="Center"/><ComboBox ItemsSource="{Binding SupplierList}" SelectedItem="{Binding Supplier}"  DisplayMemberPath="Name" MinWidth="200"/></StackPanel><StackPanel Orientation="Horizontal" Height="30" Margin="0 5 0 10"><TextBlock Text="单   位:" Width="70" FontSize="18" VerticalAlignment="Center"/><ComboBox ItemsSource="{Binding Product.Units}" SelectedItem="{Binding Product.Unit}" Width="200"   /></StackPanel><StackPanel Orientation="Horizontal" Height="30" Margin="0 5 0 10"><TextBlock Text="类   型:" Width="70" FontSize="18" VerticalAlignment="Center"/><ComboBox ItemsSource="{Binding Product.ProductType}" SelectedItem="{Binding Product.Category}" Width="200"   /></StackPanel><StackPanel Orientation="Horizontal" Height="30" Margin="0 5 0 10"><TextBlock Text="商品名:" Width="70" FontSize="18" VerticalAlignment="Center"/><TextBox Text="{Binding Product.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="200" Height="30" VerticalAlignment="Center"/></StackPanel><StackPanel Orientation="Horizontal" Height="30" Margin="0 5 0 10"><TextBlock Text="单   价:" Width="70" FontSize="18" VerticalAlignment="Center"/><TextBox Text="{Binding Product.Price, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" Width="200" Height="30" VerticalAlignment="Center"/></StackPanel><StackPanel Orientation="Horizontal" Height="30" Margin="0 5 0 10"><TextBlock Text="库   存:" Width="70" FontSize="18" VerticalAlignment="Center"/><TextBox Text="{Binding Product.Quantity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  Width="200"   /></StackPanel></StackPanel><Grid Grid.Column="1" Margin="10" Background="#E2E2E2"><TextBlock Text="选择商品图片" HorizontalAlignment="Center" VerticalAlignment="Center"/><Border Background="Transparent"><i:Interaction.Triggers><i:EventTrigger EventName="MouseUp"><i:InvokeCommandAction Command="{Binding SelectImageCommand}"/></i:EventTrigger></i:Interaction.Triggers><Image Source="{Binding ImageSource}"></Image></Border></Grid></Grid><StackPanel Grid.Row="2" Margin="10" Orientation="Horizontal" HorizontalAlignment="Right"><Button x:Name="button1" Content="新增" Command="{Binding AddCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Margin="10" Width="60" Height="25"/><Button x:Name="button2" Content="关闭" Command="{Binding ExitCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Margin="10"  Width="60" Height="25"/></StackPanel></Grid>
</Window>
  • AddCustomerViewModel.cs包含属性由下拉框的供应商列表、单位、类型、商品名、单价、库存,以及当前供应商等内容,实现代码如下:
  • 注意需要为新增按钮增加Product.SupplierId = Supplier.Id 将当前供应商Id传入
using GalaSoft.MvvmLight.Command;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media.Imaging;
using 超市管理系统.Entity;
using 超市管理系统.Helper;namespace 超市管理系统.ViewModel
{public class AddProductViewModel : ViewModelBase2{private ProductProvider productProvider = new ProductProvider();private Product product;public Product Product{get { return product; }set{product = value;RaisePropertyChanged();}}private SupplierProvider supplierProvider = new SupplierProvider();private List<Supplier> supplierList = new List<Supplier>();public List<Supplier> SupplierList{get { return supplierList; }set { supplierList = value; RaisePropertyChanged(); }}private Supplier supplier;public Supplier Supplier{get { return supplier; }set{supplier = value;RaisePropertyChanged();}}#region commandspublic RelayCommand<Window> LoadedCommand{get{return new RelayCommand<Window>((view) =>{Product = new Product();SupplierList = supplierProvider.GetAll();ImageSource = null;Supplier = null;});}}public RelayCommand<Window> AddCommand{get{return new RelayCommand<Window>((view) =>{if (string.IsNullOrEmpty(Product.Name)){MessageBox.Show("姓名不能为空!");return;}Product.SupplierId = Supplier.Id;//将当前供应商Id传入Product.InsertDate = DateTime.Now;int count = productProvider.Insert(Product);if (count > 0){MessageBox.Show("操作成功!");}view.DialogResult = true;view.Close();});}}//当前商品图片private BitmapImage imageSourece;public BitmapImage ImageSource{get{return imageSourece;}set{imageSourece = value;RaisePropertyChanged();}}public RelayCommand<Window> SelectImageCommand{get{return new RelayCommand<Window>((view) =>{OpenFileDialog openFileDialog = new OpenFileDialog();//对话框标题openFileDialog.Title = "选择图片";//设置文件类型openFileDialog.Filter = "图片文件(*.jpg)|*.jpg|所有文件(*.*)|*.*";//默认文件顺序openFileDialog.FilterIndex = 1;//不可多选openFileDialog.Multiselect = false;//记忆上次打开目录openFileDialog.RestoreDirectory = true;if (openFileDialog.ShowDialog().Value == true) { string fileName = openFileDialog.FileName;ImageSource = new BitmapImage(new Uri(fileName));product.Image = ImageHelper.GetImageString(fileName);//测试转换是否正常var s = ImageHelper.GetBitmapImage(product.Image);ImageSource = s;}});}}public RelayCommand<Window> ExitCommand{get{return new RelayCommand<Window>((view) =>{Product = new Product();});}}#endregion}
}

在这里插入图片描述

  • 新增商品时添加的图片需要将图片转换为二进制流。在项目新建Helper文件夹,增加ImageHelper类包含函数GetImageString获取图片二进制流和GetBitmapImage二进制流转化为图片
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media.Imaging;namespace 超市管理系统.Helper
{public class ImageHelper{/// <summary>/// 获取图片的二进制流/// </summary>/// <param name="fileName"></param>public static string GetImageString(string fileName){try{FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);byte[] buffer = new byte[fileStream.Length];fileStream.Read(buffer, 0, buffer.Length);//从fileStream中读取数据,写入buffer中return Convert.ToBase64String(buffer);}catch (Exception e){MessageBox.Show(e.Message);return string.Empty;}}/// <summary>/// 二进制流转换成图片资源/// </summary>/// <param name="fileName"></param>/// <returns></returns>public static BitmapImage GetBitmapImage(string _buffer){BitmapImage image = new BitmapImage();try{byte[] buffer = Convert.FromBase64String(_buffer);MemoryStream stream = new MemoryStream(buffer, 0, buffer.Length);stream.Write(buffer, 0, buffer.Length);stream.Position = 0;image.BeginInit();image.CacheOption = BitmapCacheOption.OnLoad;image.StreamSource = stream;image.EndInit();image.Freeze();return image;}catch (Exception e){MessageBox.Show(e.Message);return image;}}}
}

6.1 商品管理主界面

  • ProductView.xaml内容复用CustomerView.xaml并将Customer修改为Product,将绑定的属性改为Product属性
  • 通过Image.ToolTip将鼠标悬停可实现图片放大
<UserControl x:Class="超市管理系统.View.ProductView"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:超市管理系统.View" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"mc:Ignorable="d" Background="{Binding AppData.Background}"DataContext="{Binding Source={StaticResource Locator}, Path=ProductViewModel}"d:DesignHeight="450" d:DesignWidth="800"><i:Interaction.Triggers><i:EventTrigger EventName ="Loaded"><i:InvokeCommandAction Command="{Binding LoadedCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"/></i:EventTrigger></i:Interaction.Triggers><Grid><Grid.RowDefinitions><RowDefinition Height="40"/><RowDefinition/></Grid.RowDefinitions><Border BorderBrush="#22304B" BorderThickness="0 0 0 1"><TextBlock Text="商品管理" VerticalAlignment="center" Margin="5 0 0 0" Foreground="{Binding AppData.Foreground}" FontSize="16"/></Border><Grid Grid.Row="1"><Grid.RowDefinitions><RowDefinition/><RowDefinition Height="auto"/></Grid.RowDefinitions><DataGrid ItemsSource="{Binding ProductList}"SelectedItem="{Binding SelectedProduct}"Style="{StaticResource DataGridStyle}"><DataGrid.Columns><!--普通写法--><!--<DataGridTextColumn Width="auto" Binding="{Binding Id}" Header="序号"/><DataGridTextColumn Width="auto" Binding="{Binding Name}" Header="姓名"/><DataGridTextColumn Width="auto" Binding="{Binding Telephone}" Header="电话"/><DataGridTextColumn Width="auto" Binding="{Binding Address}" Header="地址"/>--><!--数据模板写法--><DataGridTemplateColumn Width="auto" Header="序号"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBox Text="{Binding Id,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource DataGridTextBoxStyle}"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="auto" Header="商品名称"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBox Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="auto" Header="商品图片"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><Image Source="{Binding BitmapImage}" ><Image.ToolTip><Grid><Image Source="{Binding BitmapImage}"/></Grid></Image.ToolTip></Image></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="auto" Header="单价"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBox Text="{Binding Price, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource DataGridTextBoxStyle}" HorizontalAlignment="Left"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="auto" Header="单位"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBox Text="{Binding Unit, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource DataGridTextBoxStyle}" HorizontalAlignment="Left"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="auto" Header="分类"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBox Text="{Binding Category, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource DataGridTextBoxStyle}" HorizontalAlignment="Left"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="auto" Header="单位"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBox Text="{Binding Quantity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource DataGridTextBoxStyle}" HorizontalAlignment="Left"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="auto" Header="日期"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBox Text="{Binding InsertDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource DataGridTextBoxStyle}" HorizontalAlignment="Left"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn></DataGrid.Columns></DataGrid><Grid Grid.Row="1"><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><StackPanel Grid.Column="0" Margin="0 5 5 5" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center"><TextBlock Text="当前商品:"  Margin="0 0 10 0" Foreground="White" Width="auto" /><TextBlock Text="{Binding SelectedProduct.Name}" Foreground="White"  Width="auto"/></StackPanel><StackPanel Grid.Column="1"  Margin="0 5 5 5" Orientation="Horizontal" HorizontalAlignment="Right"><Button Content="新增商品" Command="{Binding OpenAddViewCommand}" Margin="0 0 10 0"  Width="80" Height="25"/><Button Content="删除商品" Command="{Binding DeleteCommand}" Margin="0 0 10 0" Width="80" Height="25"/><Button Content="修改" Command="{Binding EditCommand}"  Width="80" Margin="0 0 10 0" Height="25"/><Button Content="保存" Command="{Binding SaveCommand}"  Width="80" Margin="0 0 10 0" Height="25"/></StackPanel></Grid></Grid></Grid>
</UserControl>
  • ProductViewModel.cs内实现代码如下:
using CommonServiceLocator;
using GalaSoft.MvvmLight.Command;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using 超市管理系统.Entity;
using 超市管理系统.View;namespace 超市管理系统.ViewModel
{public class ProductViewModel : ViewModelBase2{private ProductProvider productProvider = new ProductProvider();private List<Product> productList = new List<Product>();public List<Product> ProductList{get { return productList; }set{productList = value;RaisePropertyChanged();}}//当前选中的顾客实体private Product selectedProduct;public Product SelectedProduct{get { return selectedProduct; }set{selectedProduct = value;RaisePropertyChanged();}}#region commands/// <summary>/// 加载所有供应商/// </summary>public RelayCommand<UserControl> LoadedCommand{get{return new RelayCommand<UserControl>((view) =>{ProductList = productProvider.GetAll();});}}public RelayCommand<UserControl> OpenAddViewCommand{get{return new RelayCommand<UserControl>((view) =>{AddProductView addProductView = new AddProductView();if (addProductView.ShowDialog().Value == true){ProductList = productProvider.GetAll();}});}}public RelayCommand<UserControl> DeleteCommand{get{return new RelayCommand<UserControl>((view) =>{if (SelectedProduct == null) { return; }if (Dialog.Show() == true){var count = productProvider.Delete(SelectedProduct);if (count > 0){MessageBox.Show("删除成功");ProductList = productProvider.GetAll();}}});}}public RelayCommand<UserControl> SaveCommand{get{return new RelayCommand<UserControl>((view) =>{var count = productProvider.Save();if (count > 0){MessageBox.Show("保存成功");ProductList = productProvider.GetAll();}});}}public RelayCommand<Window> EditCommand{get{return new RelayCommand<Window>((view) =>{if (SelectedProduct == null) { return; }var vm = ServiceLocator.Current.GetInstance<EditProductViewModel>();vm.Product = SelectedProduct;EditProductView editProductView = new EditProductView();if (editProductView.ShowDialog().Value == true){ProductList = productProvider.GetAll();}});}}#endregion}
}

在这里插入图片描述

6.3 修改商品

  • 新增EditProductView.xaml,复用EditCustomerView.xaml并修改,包含属性由下拉框的供应商列表、单位、类型、商品名、单价、库存,以及当前供应商等内容。
<Window x:Class="超市管理系统.View.EditProductView"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:超市管理系统.View"xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"mc:Ignorable="d" WindowStartupLocation="CenterScreen"DataContext="{Binding Source={StaticResource Locator}, Path=EditProductViewModel}"Title="修改商品" Height="450" Width="650"><i:Interaction.Triggers><i:EventTrigger EventName ="Loaded"><i:InvokeCommandAction Command="{Binding LoadedCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/></i:EventTrigger></i:Interaction.Triggers><Grid><Grid.RowDefinitions><RowDefinition Height="auto"/><RowDefinition/><RowDefinition Height="auto"/></Grid.RowDefinitions><Grid Grid.Row="0" Height="50" Background="{Binding AppData.Background}"><!--TextBlock设置height时,VerticalAlignment不生效,此地设置给grid--><TextBlock Text="修改商品" FontSize="24" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/></Grid><Grid Grid.Row="1"><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><StackPanel Grid.Row="0" Margin="10" HorizontalAlignment="Center" ><StackPanel Orientation="Horizontal" Height="30" Margin="0 5 0 10"><TextBlock Text="供应商:" Width="70" FontSize="18" VerticalAlignment="Center"/><ComboBox ItemsSource="{Binding SupplierList}" SelectedItem="{Binding Supplier}"  DisplayMemberPath="Name" MinWidth="200"/></StackPanel><StackPanel Orientation="Horizontal" Height="30" Margin="0 5 0 10"><TextBlock Text="单   位:" Width="70" FontSize="18" VerticalAlignment="Center"/><ComboBox ItemsSource="{Binding Product.Units}" SelectedItem="{Binding Product.Unit}" Width="200"   /></StackPanel><StackPanel Orientation="Horizontal" Height="30" Margin="0 5 0 10"><TextBlock Text="类   型:" Width="70" FontSize="18" VerticalAlignment="Center"/><ComboBox ItemsSource="{Binding Product.ProductType}" SelectedItem="{Binding Product.Category}" Width="200"   /></StackPanel><StackPanel Orientation="Horizontal" Height="30" Margin="0 5 0 10"><TextBlock Text="商品名:" Width="70" FontSize="18" VerticalAlignment="Center"/><TextBox Text="{Binding Product.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="200" Height="30" VerticalAlignment="Center"/></StackPanel><StackPanel Orientation="Horizontal" Height="30" Margin="0 5 0 10"><TextBlock Text="单   价:" Width="70" FontSize="18" VerticalAlignment="Center"/><TextBox Text="{Binding Product.Price, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="200" Height="30" VerticalAlignment="Center"/></StackPanel><StackPanel Orientation="Horizontal" Height="30" Margin="0 5 0 10"><TextBlock Text="库   存:" Width="70" FontSize="18" VerticalAlignment="Center"/><TextBox Text="{Binding Product.Quantity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  Width="200"   /></StackPanel></StackPanel><Grid Grid.Column="1" Margin="10" Background="#E2E2E2"><TextBlock Text="选择商品图片" HorizontalAlignment="Center" VerticalAlignment="Center"/><Border Background="Transparent"><i:Interaction.Triggers><i:EventTrigger EventName="MouseUp"><i:InvokeCommandAction Command="{Binding SelectImageCommand}"/></i:EventTrigger></i:Interaction.Triggers><Image Source="{Binding ImageSource}"></Image></Border></Grid></Grid><StackPanel Grid.Row="2" Margin="10" Orientation="Horizontal" HorizontalAlignment="Right"><Button x:Name="button1" Content="确定" Command="{Binding OKCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Margin="10" Width="60" Height="25"/><Button x:Name="button2" Content="关闭" Command="{Binding ExitCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Margin="10"  Width="60" Height="25"/></StackPanel></Grid>
</Window>
  • EditProductViewModel.cs复用 AddProductViewModel.cs内的代码与命令。在OK按钮的命令中需要Product.SupplierId = Supplier.Id; 将当前供应商Id传入
using GalaSoft.MvvmLight.Command;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using 超市管理系统.Entity;
using 超市管理系统.Helper;namespace 超市管理系统.ViewModel
{public class EditProductViewModel : ViewModelBase2{private ProductProvider productProvider = new ProductProvider();private Product product;public Product Product{get { return product; }set{product = value;RaisePropertyChanged();}}private SupplierProvider supplierProvider = new SupplierProvider();private List<Supplier> supplierList = new List<Supplier>();public List<Supplier> SupplierList{get { return supplierList; }set{supplierList = value;RaisePropertyChanged();}}private Supplier supplier;public Supplier Supplier{get { return supplier; }set{supplier = value;RaisePropertyChanged();}}//当前商品图片private BitmapImage imageSourece;public BitmapImage ImageSource{get{return imageSourece;}set{imageSourece = value;RaisePropertyChanged();}}#region commandspublic RelayCommand<Window> LoadedCommand{get{return new RelayCommand<Window>((view) =>{ImageSource = Product.BitmapImage;SupplierList = supplierProvider.GetAll();Supplier = SupplierList.FirstOrDefault(t => t.Id == Product.SupplierId);});}}public RelayCommand<Window> SelectImageCommand{get{return new RelayCommand<Window>((view) =>{OpenFileDialog openFileDialog = new OpenFileDialog();//对话框标题openFileDialog.Title = "选择图片";//设置文件类型openFileDialog.Filter = "图片文件(*.jpg)|*.jpg|所有文件(*.*)|*.*";//默认文件顺序openFileDialog.FilterIndex = 1;//不可多选openFileDialog.Multiselect = false;//记忆上次打开目录openFileDialog.RestoreDirectory = true;if (openFileDialog.ShowDialog().Value == true){string fileName = openFileDialog.FileName;ImageSource = new BitmapImage(new Uri(fileName));product.Image = ImageHelper.GetImageString(fileName);//测试转换是否正常//var s = ImageHelper.GetBitmapImage(product.Image);//ImageSource = s;}});}}public RelayCommand<Window> OKCommand{get{return new RelayCommand<Window>((view) =>{if (string.IsNullOrEmpty(Product.Name)){MessageBox.Show("姓名不能为空!");return;}Product.SupplierId = Supplier.Id;//将当前供应商Id传入//Product.InsertDate = DateTime.Now;int count = productProvider.Update(Product);if (count > 0){MessageBox.Show("操作成功!");}view.DialogResult = true;view.Close();});}}public RelayCommand<Window> ExitCommand{get{return new RelayCommand<Window>((view) =>{Product = new Product();});}}#endregion}
}

在这里插入图片描述

http://www.dtcms.com/a/306367.html

相关文章:

  • 今日行情明日机会——20250730
  • 【LeetCode】链表反转实现与测试
  • ansible巡检脚本
  • 2025年7月28日–7月29日 · AI 今日头条
  • 串口接收数据包(协议带帧头帧尾)的编程实现方法:1、数据包格式定义结构体2、使用队列进行数据接收、校验解包
  • centos7 aarch64上安装PostgreSQL14.3
  • 如何在生成式引擎优化(GEO)中取得成功
  • Java:高频面试知识分享1
  • 比特币挖矿的能源消耗和环保问题
  • 【Linux】重生之从零开始学习运维之备份恢复
  • CONTRASTIVE-KAN:一种用于稀缺标记数据的网络安全半监督入侵检测框架
  • Apache Kafka核心组件详解
  • click和touch事件触发顺序 糊里糊涂解决的奇怪bug
  • 开源 Arkts 鸿蒙应用 开发(十二)传感器的使用
  • WiFi连接简单流程
  • Linux命令---服务管理类命令
  • EPOLL 的用法
  • 报考民航安检员证需要具备哪些条件?
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | VerifyAccountUi(验证码组件)
  • git本地仓库,工作区和暂存区的知识
  • SpringBoot之多环境配置全解析
  • 实现implements InitializingBean, DisposableBean 有什么用
  • AI 代码助手在大前端项目中的协作开发模式探索
  • 关于tresos Studio(EB)的MCAL配置之MCU
  • 商标注册后可以随意更改字体和颜色吗!
  • Vue3 中 toValue 与 unref 深度解析:异同、场景与最佳实践
  • 单片机学习笔记.AD/DA(略含有SPI,用的是普中开发板上的XPT2046芯片)
  • 力扣209:长度最小的子数组
  • 锁定中科院1区TOP!融合LSTM与Attention做时间序列预测 !
  • Metering Solution for Solar + Storage光伏+储能计量解决方案 UL 2735 Certification功率表能源监测电表