Files
29WxOrder/Main.Test/ViewModels/MainViewModel.cs
T
2026-10-22 13:42:04 +08:00

65 lines
3.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Windows;
using MAX.Core.Logger;
using Prism.Commands;
using Prism.Mvvm;
using Trade.Framework.Services;
namespace Main.Test.ViewModels;
internal class MainViewModel : BindableBase
{
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)
{
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));
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} 网络随机图,可见时加载。每次重新加载使用新种子。冷 / 热测试以当前页面已加载状态为准。");
}
}