Caliburn Micro Guard方法不评估财产变化

Cha*_*lie 18 c# wpf mvvm caliburn.micro

我一直在使用Caliburn Micro MVVM框架,并且在防护方法方面遇到了一些问题.

我有一个视图模型:

public class MyViewModel : PropertyChangedBase, IMyViewModel
Run Code Online (Sandbox Code Playgroud)

财产:

public DateTime? Date
{
   get{return this.date; }
   set
   {
      this.date = value;
      this.NotifyOfPropertyChange(() => Date);
   }
}
Run Code Online (Sandbox Code Playgroud)

另外,我的视图模型中有一个方法,带有一个保护方法

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

public bool CanCalculate()
{
    return this.Date.HasValue;
}
Run Code Online (Sandbox Code Playgroud)

我的视图中有一个按钮:

我遇到的问题是CanCalculate方法在加载时执行,但是当我在文本字段中输入值时,它不会重新评估CanCalculate方法.我在设置数据绑定视图模型属性时触发属性更改事件,那么可能是什么问题?

Cha*_*lie 34

好吧我明白了.我没有意识到你必须触发防护方法通知,认为框架做到了这一点,但这是有道理的.

所以我将我的属性设置器更改为:

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

并将我的CanCalculate方法更改为属性:

public bool CanCalculate
{
    get
    {
        return this.Date.HasValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在一切正常:)

  • CanCalculate是一种方法,你做了什么让它工作 (3认同)
  • 只需将其转换为带有getter的布尔属性即可. (3认同)