Jac*_*goń 3 c# silverlight mvvm relaycommand mvvm-light
我使用绑定到使用CanExecute委托初始化的RelayCommands的几个按钮.
RelayCommand DeleteCommand;
bool CanDelete()
{
return BoolProp1 && BoolProp2;
}
...
DeleteCommand = new RelayCommand(Delete, CanDelete);
Run Code Online (Sandbox Code Playgroud)
BoolProp1并且BoolProp2是正确的属性,setter正确提升PropertyChanged,但众所周知,这还不足以使SL重新评估CanExecute命令.这就是为什么我也打电话给Delete.RaiseCanExecuteChanged()两个二传手.
所有这些工作正常(按钮被禁用并正确启用)到某一点,所有停止.在这一点上,呼叫Delete.RaiseCanExecuteChanged()不再触发我的断点CanDelete(),按钮永远保持原样.
我花了2个小时试图找出确切原因而没有效果.我怀疑RaiseCanExecuteChanged()在单个"绑定迭代"期间多次调用会以某种方式破坏机制.
任何提示?我已经在考虑使用额外的IsExecutable字段刷新INotifyPropertyChanged...
UPDATE
RelayCommand实际上是GalaSoft.MvvmLight.Command.RelayCommand来自MVVM Light Toolkit.ILSpy展示了一个非常简单的ICommand实现:
public bool CanExecute(object parameter)
{
return this._canExecute == null || this._canExecute.Invoke();
}
public void RaiseCanExecuteChanged()
{
EventHandler canExecuteChanged = this.CanExecuteChanged;
if (canExecuteChanged != null)
{
canExecuteChanged.Invoke(this, EventArgs.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
有_canExecute是一个Func<bool>集一次传递给构造函数的值.
我仍在努力尽量少复制这个问题.
UPDATE
看我的回答.
PEBKAC.在某些情况下我的框架运行代码
DeleteCommand = new RelayCommand(Delete, CanDelete);
Run Code Online (Sandbox Code Playgroud)
多一次,覆盖实际绑定到新实例查看的命令.
如果有人遇到此问题 - 请确保您正在调用RelayCommand.RaiseCanExecuteChanged()视图绑定的同一实例.
| 归档时间: |
|
| 查看次数: |
5696 次 |
| 最近记录: |