簡體   English   中英

Caliburn Micro Guard方法不評估財產變化

[英]Caliburn Micro Guard Methods not evaluating on property change

我一直在使用Caliburn Micro MVVM框架,並且在防護方法方面遇到了一些問題。

我有一個視圖模型:

public class MyViewModel : PropertyChangedBase, IMyViewModel

財產:

public DateTime? Date
{
   get{return this.date; }
   set
   {
      this.date = value;
      this.NotifyOfPropertyChange(() => Date);
   }
}

另外,我的視圖模型中有一個方法,帶有一個保護方法

public void Calculate()
{
    // ..some code..
}

public bool CanCalculate()
{
    return this.Date.HasValue;
}

我的視圖中有一個按鈕:

我遇到的問題是CanCalculate方法在加載時執行,但是當我在文本字段中輸入值時,它不會重新評估CanCalculate方法。 我在設置數據綁定視圖模型屬性時觸發屬性更改事件,那么可能是什么問題?

好吧我明白了。 我沒有意識到你必須觸發防護方法通知,認為框架做到了這一點,但這是有道理的。

所以我將我的屬性設置器更改為:

public DateTime? Date
{
   get
   {
      return this.date; 
   }
   set
   {
      this.date = value;
      this.NotifyOfPropertyChange(() => Date);
      this.NotifyOfPropertyChange(() => CanCalculate);
   }
}

並將我的CanCalculate方法更改為屬性:

public bool CanCalculate
{
    get
    {
        return this.Date.HasValue;
    }
}

現在一切正常:)

如果你不需要CanExecute作為方法,因為你不會使用參數。 然后你可以用標准通知重寫它作為屬性,只有getter。 當你改變getter的結果時調用它的PropertyChanged。

我假設這些是通過Command調用的(一些代碼圍繞什么叫這些方法會有幫助)。

如果您遇到的情況是您希望命令根據某些輸入進行重新評估,則需要調用CommandManager.InvalidateRequerySuggested()以便調用命令CanExecute s。 由於命令綁定到按鈕而不是文本框,因此不會更新。 在屬性設置器(綁定到文本框的那個)中,您必須告訴框架重新查詢命令。 這反過來將調用您的CanCalculate方法。

如果Calculate和CanCalculate方法與命令無關,那么上述方法將無濟於事。

暫無
暫無

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

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