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.

94 lines
2.7 KiB
C#

using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using Txgy.EWS.Client.Upgrade.DAL;
using Txgy.EWS.Client.Upgrade.Model;
namespace Txgy.EWS.Client.Upgrade.ViewModel
{
public class MainWindowViewModel : BindableBase
{
//private LocalDataAccess localDataAccess = new LocalDataAccess();
private WebDataAccess webDataAccess = new WebDataAccess();
public Action ConfirmAction;
public MainWindowViewModel(string[] files)
{
for (int i = 0; i < files.Length; i++)
{
string[] arg = files[i].Split('|');
FileList.Add(new FileInfoModel
{
Index = (i + 1),
FileName = arg[0],
FileMd5 = arg[1],
State = "待更新",
Progress = 0
});
}
}
private int _progress;
public int Progress
{
get { return _progress; }
set { SetProperty(ref _progress, value); }
}
public ObservableCollection<FileInfoModel> FileList { get; set; } = new ObservableCollection<FileInfoModel>();
private ICommand _startCommand;
public ICommand StartCommand
{
get
{
if (_startCommand == null)
_startCommand = new DelegateCommand(OnStart).ObservesCanExecute(() => IsCanStart);
return _startCommand;
}
}
private bool _isCanStart = true;
public bool IsCanStart
{
get { return _isCanStart; }
set { SetProperty(ref _isCanStart, value); }
}
private int completedCount = 0;
private void OnStart()
{
if (FileList.Count > 0)
{
IsCanStart = false;
Task.Run(async () =>
{
int count = await webDataAccess.DownloadAsync(
FileList.ToList(),
new Action<FileInfoModel>((fi) =>
{
completedCount++;
Progress = (int)(completedCount * 1.0 / FileList.Count * 100);
}));
if (FileList.Count != count)
IsCanStart = true;
else
{
// 打开更新完成确认窗口
ConfirmAction?.Invoke();
}
});
}
}
}
}