using CommunityToolkit.Mvvm.ComponentModel; using Prism.Events; using SlnMesnac.Model.domain; using SlnMesnac.Repository.service; using SlnMesnac.WPF.Attribute; using SlnMesnac.WPF.Event; using SlnMesnac.WPF.ViewModel.Base; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SlnMesnac.WPF.ViewModel.ProductDetails { [RegisterAsSingletonAttribute] public partial class ProductDetailsViewModel : BaseViewModel { private readonly Ibase_product_infoServices _product_infoServices; private readonly Ibase_product_featureServices _product_featureServices; private readonly Ibase_product_describeServices _product_describeServices; private readonly Ibase_product_paramServices _product_paramServices; private readonly IEventAggregator _eventAggregator; [ObservableProperty] public ObservableCollection productFeature = new ObservableCollection(); [ObservableProperty] public ObservableCollection productDescribe = new ObservableCollection(); [ObservableProperty] public ObservableCollection productParams = new ObservableCollection(); [ObservableProperty] public base_product_info productInfo = new base_product_info(); public ProductDetailsViewModel(Ibase_product_infoServices product_infoServices, Ibase_product_featureServices product_featureServices, Ibase_product_describeServices product_describeServices, Ibase_product_paramServices product_paramServices, IEventAggregator eventAggregator) { _product_featureServices = product_featureServices; _product_describeServices = product_describeServices; _product_paramServices = product_paramServices; _product_infoServices = product_infoServices; _eventAggregator = eventAggregator; _eventAggregator.GetEvent().Subscribe(OnProductSelected); } private void OnProductSelected(string productCode) { Init(productCode); } private void Init(string productCode) { ProductFeature.Clear(); ProductDescribe.Clear(); ProductParams.Clear(); ProductInfo = _product_infoServices.Query(x => x.productCode == productCode).First(); var productFeatureInfo = _product_featureServices.Query(x => x.productCode == productCode); if (productFeatureInfo.Count == 0) { for (int i = 0; i < 2; i++) { ProductFeature.Add(new base_product_feature() { productFeature = string.Empty }); } } else { ProductFeature = new ObservableCollection(productFeatureInfo); } var productDescribeInfo = _product_describeServices.Query(x => x.productCode == productCode); if (productDescribeInfo.Count == 0) { for (int i = 0; i < 3; i++) { ProductDescribe.Add(new base_product_describe() { describeTitle = string.Empty, describeContent = string.Empty }); } } else { ProductDescribe = new ObservableCollection(productDescribeInfo); } var productParamsInfo = _product_paramServices.Query(x => x.productCode == productCode); if (productParamsInfo.Count == 0) { for (int i = 0; i < 19; i++) { ProductParams.Add(new base_product_param() { paramContent = string.Empty, }); } } else { ProductParams = new ObservableCollection(productParamsInfo); } } } }