You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
4.3 KiB
C#

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<base_product_feature> productFeature = new ObservableCollection<base_product_feature>();
[ObservableProperty]
public ObservableCollection<base_product_describe> productDescribe = new ObservableCollection<base_product_describe>();
[ObservableProperty]
public ObservableCollection<base_product_param> productParams = new ObservableCollection<base_product_param>();
[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<ProductCodeEvent>().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<base_product_feature>(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<base_product_describe>(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<base_product_param>(productParamsInfo);
}
}
}
}