[英]Specify custom guard property for Caliburn.Micro Action Message
[英]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.