簡體   English   中英

奇怪的行為onCanExecute RelayCommand MVVMLight 5+

[英]Odd behaviour onCanExecute RelayCommand MVVMLight 5+

我正在將一個工具從MVVM Light 4.0.3遷移到5.4.1,我發現最新的RelayCommand實現有一個非常奇怪的問題。

這是V4.0.3中的舊實現:

IMG1

IMG2

這是V5.4.1中的最新實現:

IMG4

IMG3

在我能夠使用變量來定義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.CommandGalaSoft.MvvmLight.CommandWpf

我沒記錯,在古代歷史的某個地方,我必須自己做一個項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM