【发布时间】:2017-02-23 02:56:49
【问题描述】:
我有一个 RelayCommand,绑定到一个 AppBarButton,如下:
Command="{Binding NextCommand, UpdateSourceTrigger=PropertyChanged}"
命令的 CanExecute 属性只是一个简单的空检查。
private bool CanExecuteNextCommand() => !(this.SelectedItem == null);
但是,如果 RaiseCanExecuteChanged 被快速调用(通过触发器)多次,那么这里:
CanExecuteChanged?.Invoke(this, EventArgs.Empty);
我得到以下异常:
“调用 COM 组件返回了错误 HRESULT E_FAIL。”
如果我从视图中删除 Command 属性绑定,它会起作用。
我什至尝试在触发器引发 CanExecuteChangeds 之前添加一个 Task.Delay(200),但我得到了同样的异常。
有没有人在 UWP 中遇到过这样的事情?
【问题讨论】:
-
不确定问题是否出在您自己的代码中。触发器是什么?请与我们分享minimal reproducible example。
-
我看不出有任何理由将
UpdateSourceTrigger=PropertyChanged放在命令绑定上!通常,一个命令永远不会改变(但没有什么能阻止你在命令执行方法中拥有逻辑!)