【发布时间】:2016-05-04 10:52:22
【问题描述】:
我的应用程序正在使用 MVVM Light 工具包。这是与 XAML 中的按钮绑定的命令:
private RelayCommand _buttonCommandNew;
public RelayCommand ButtonCommandNew
{
get
{
var worker = new TCService();
return _buttonCommandNew
?? (_buttonCommandNew = new RelayCommand(async () =>
{
var progress = new Progress<string>(status =>
{
ProgressText = status;
});
await worker.GenerateConfiguration(1, "", "", progress);
}, () => !worker.InProgress
));
}
}
这是服务:
class TCService : ITCService
{
public Task<bool> GenerateConfiguration(int cellCount, string templateFilePath, string outputFilePath, IProgress<string> progress)
{
return Task.Run(() => RunConfigurator(progress));
}
public bool InProgress { get; private set; }
private bool RunConfigurator(IProgress<string> progress)
{
InProgress = true;
Thread.Sleep(6000);
progress.Report("Yeah!");
InProgress = false;
return true;
}
}
我想要实现的是在服务开始工作时禁用按钮并在最后启用它。当前的实现不会发生这种情况。更重要的是,要遵守 MVVM Light。我觉得我的服务应该继承自 MVVM Light 中的一个基类,并且我需要使用 Set 来通知 UI 有关更改。但不确定我的方向是否正确。
【问题讨论】:
标签: c# wpf xaml mvvm-light