65 lines
3.0 KiB
C#
65 lines
3.0 KiB
C#
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} 网络随机图,可见时加载。每次重新加载使用新种子。冷 / 热测试以当前页面已加载状态为准。");
|
||
}
|
||
}
|