[英]Odd behaviour onCanExecute RelayCommand MVVMLight 5+
我正在將一個工具從MVVM Light 4.0.3遷移到5.4.1,我發現最新的RelayCommand實現有一個非常奇怪的問題。
這是V4.0.3中的舊實現:
這是V5.4.1中的最新實現:
在我能夠使用變量來定義canExecute行為(啟用按鈕)之前,使用以下代碼:
public ICommand GetNewItemsFromDB { get; private set; }
private bool _IsActive;
public bool IsActive
{
get
{
return _IsActive;
}
set
{
if (_IsActive != value)
{
_IsActive = value;
this.RaisePropertyChanged(() => IsActive);
}
}
}
GetNewItemsFromDB = new RelayCommand(GetDataFromDB, () => { return IsActive == false; });
private void GetDataFromDB()
{
IsActive = true;
}
之前的代碼能夠在MVVM Light 4.0.3中啟用按鈕而沒有任何問題; 但是,在最新的實現總是被禁用,我添加了一點,因為有一個新的keepTargetAlive定義:
GetNewItemsFromDB = new RelayCommand(GetDataFromDB, () => { return IsActive == false; }, true);
此外,我嘗試了錯誤的選項,沒有任何改變。 我發現重新啟用它的唯一方法是設置一個像這樣的預定義值:
GetNewItemsFromDB = new RelayCommand(GetDataFromDB, () => true, true);
在我的情況下,這種實現將毫無用處,因為RelayCommand依賴於變量IsActive ,它決定了它是否被啟用。 有什么我應該在V5中改變它以使其工作? 謝謝你的建議。
如果我正確理解這一點。
如果您在WPF4.5或更高版本中使用此類,則需要使用
GalaSoft.MvvmLight.CommandWpf
命名空間(而不是GalaSoft.MvvmLight.Command
)。 這將啟用(或恢復)CommandManager類,該類根據CanExecute委托處理控件的自動啟用/禁用。
並在發行說明中:
問題7659的重要說明 :為了解決不再禁用控件的問題,具體取決於RelayCommand.CanExecute委托的狀態,您需要對代碼進行一些小的更改。 要選擇加入固定行為,請將您使用的命名空間從
GalaSoft.MvvmLight.Command
為GalaSoft.MvvmLight.CommandWpf
。
我沒記錯,在古代歷史的某個地方,我必須自己做一個項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.