在我的WPF应用程序中,我的视图模型中有一个方法
取消本身正在运行,但按钮的内容未更新。 这是我的代码的摘录:
public async void Execute(object parameter)
{
if (cts == null)
{
cts = new CancellationTokenSource();
OnPropertyChanged(nameof(Name));
await ConnectDevice(self.CurrentScannedDevice, cts.Token);
cts = null;
OnPropertyChanged(nameof(Name));
}
else
{
cts.Cancel();
OnPropertyChanged(nameof(Name));
}
}
private CancellationTokenSource cts;
public string Name { get // bound to the content of the button
{
return cts == null
? "Connect Device"
: cts.IsCancellationRequested
? "Cancelling Connecting To Device"
: "Cancel Connecting To Device";
}
}
private async Task ConnectDevice(object currentScannedDevice, CancellationToken ct)
{
//...
}
XAML
<Button
HorizontalAlignment="Left"
Command="{Binding Path=ScanCommand}"
Content="{Binding Path=Name}" />
答案 0 :(得分:0)
我找到了原因。
在&#34;真实&#34;代码,Execute
方法存在于命令类ScanCommandImpl
中。此ICommand类的属性如下所示:
public ICommand ScanCommand => new ScanCommandImpl();
它以某种方式重新创建了ScanCommandImpl,因此cts的变量一直在改变。
从构造函数初始化它修复了问题。