当前位置: 首页 > 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.lryc.cn/news/604724.html

相关文章:

  • 【科研绘图系列】R语言绘制绝对量柱状堆积图+环形图数量统计+特数量标注
  • 潇洒郎: Kafka Ubuntu 安装部署,命令行或者python生产数据与消费数据(kafka-python)
  • 【选型】HK32L088 与 STM32F0/L0 系列 MCU 参数对比与选型建议(ST 原厂 vs 国产芯片)
  • 2025年6月数据挖掘顶刊TKDE研究热点有哪些?
  • 传输层协议UDP与TCP
  • 周期滤波策略
  • AbMole小课堂丨bFGF(FGF-2):维持干细胞培养、驱动类器官构建与细胞分化
  • 容器与虚拟机的本质差异:从资源隔离到网络存储机制
  • 如何使用 Apache Ignite 作为 Spring 框架的缓存(Spring Cache)后端
  • GitPython02-Git使用方式
  • RHCA - CL260 | Day03:配置 RHCS 集群
  • 将 qt 构建为静态库
  • BGP高级特性之正则表达式
  • vue npm install卡住没反应
  • ISO 26262 汽车功能安全(腾讯混元)
  • 在 CentOS 系统上安装 Docker
  • Kotlin -> Kotlin Lambda 表达式与 Function 接口的关系
  • 深入理解 Kotlin Flow:异步数据流处理的艺术
  • 在线教育场景下AI应用,课程视频智能生成大纲演示
  • Jupyter Notebook 中显示图片、音频、视频的方法汇总
  • Python 使用pandas库实现Excel字典码表对照自动化处理
  • C++:STL中list的使用和模拟实现
  • 《C++二叉搜索树原理剖析:从原理到高效实现教学》
  • CH347使用笔记:CH347作为FPGA下载器的几种方式
  • 大语言模型API付费?
  • 【PZ7020-StarLite 入门级开发板】——FPGA 开发的理想起点,入门与工业场景的双重优选
  • PyTorch API
  • PyTorch 生态四件套:从图片、视频到文本、语音的“开箱即用”实践笔记
  • 汽车电子控制系统开发的整体安全理念
  • 为什么网站需要高防IP?高防IP的优势是什么?