合并控件

This commit is contained in:
chfei committed 2026-10-22 13:42:04 +08:00
1 parent 233ec5d58d
commit b842292817
11 files changed
+1400 -463

No files matched your search

+55 -29
View File
@@ -1,38 +1,64 @@
using Bogus;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Windows;
using MAX.Core.Logger;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Prism.Commands;
using Prism.Mvvm;
using Trade.Framework.Services;
namespace Main.Test.ViewModels;
internal class MainViewModel
internal class MainViewModel : BindableBase
{
private readonly ILoggerFacade _logger;
public List<ItemInfo> Data { get; set; }
private List<ItemInfo> data = DemoData.Create(10000);
public List<ItemInfo> Data { get => data; private set => SetProperty(ref data, value); }
private string actionMessage = "可右键查看详情、复制编码或切换状态;默认加载 10,000 行。";
public string ActionMessage { get => actionMessage; private set => SetProperty(ref actionMessage, value); }
private ObservableCollection<ItemInfo> selectedItems = new();
public ObservableCollection<ItemInfo> SelectedItems
{
get => selectedItems;
set
{
ArgumentNullException.ThrowIfNull(value);
if (ReferenceEquals(selectedItems, value)) return;
selectedItems.CollectionChanged -= SelectionChanged;
SetProperty(ref selectedItems, value);
selectedItems.CollectionChanged += SelectionChanged;
RaisePropertyChanged(nameof(SelectedCount));
}
}
public int SelectedCount => SelectedItems.Count;
public int NetworkImageSize { get; set; }
public DelegateCommand<ItemInfo> DetailCommand { get; }
public DelegateCommand<ItemInfo> ConfirmCommand { get; }
public DelegateCommand<ItemInfo> CopyCodeCommand { get; }
public MainViewModel(ILoggerFacade logger, UserManager userManager)
{
_logger = logger;
_logger.Info("123123");
public MainViewModel(ILoggerFacade logger, UserManager userManager)
{
selectedItems.CollectionChanged += SelectionChanged;
DetailCommand = new(item => { if (item != null) ActionMessage = $"详情:{item.Code} · {item.Name} · ¥{item.Value} · {item.Buyer} · {item.Status}"; });
ConfirmCommand = new(item =>
{
if (item == null) return;
item.Status = item.Status == "已确认" ? "待处理" : "已确认";
ActionMessage = $"已更新 {item.Code}:{item.Status}";
});
CopyCodeCommand = new(item =>
{
if (item == null) return;
try { Clipboard.SetText(item.Code.ToString()); ActionMessage = $"已复制编码 {item.Code}"; }
catch (System.Runtime.InteropServices.ExternalException) { ActionMessage = "剪贴板正忙,请重试。"; }
});
}
private void SelectionChanged(object? sender, NotifyCollectionChangedEventArgs e) => RaisePropertyChanged(nameof(SelectedCount));
// 创建 Faker 并配置规则
var itemFaker = new Faker<ItemInfo>()
.RuleFor(x => x.Code, f => f.Random.Int(1000, 9999)) // 4位随机编码
.RuleFor(x => x.Name, f => f.Commerce.ProductName()) // 商品名称
.RuleFor(x => x.Value, f => f.Commerce.Price().ToString()) // 商品价格
.RuleFor(x => x.Qty, f => f.Random.Int(1, 100)); // 1-100的随机数量
// 生成单个对象
var singleItem = itemFaker.Generate();
// 生成100个对象
Data = itemFaker.Generate(1000);
//Data.Clear();
}
public async Task LoadAsync(int count)
{
if (count is < 1 or > 50000) throw new ArgumentOutOfRangeException(nameof(count));
var imageSize = NetworkImageSize;
var rows = await Task.Run(() => DemoData.Create(count, imageSize));
SelectedItems.Clear(); Data = rows;
ActionMessage = $"已加载 {count:N0} 行;" + (imageSize == 0 ? "本地缩略图。" : $"Picsum {imageSize}×{imageSize} 网络随机图,可见时加载。每次重新加载使用新种子。冷 / 热测试以当前页面已加载状态为准。");
}
}