2014-04-22 62 views
1

我有3个文本框,第一个是持续时间,第二个是金额,第三个是只是持续时间*金额的总和。我试图用NotifyOfPropertyChange实现OnPropertyChange INSTEAD。我想知道我是否可以获得帮助,知道为什么它没有更新。NotifyOfPropertyChange Not Updating

public int? SebDuration 
{ 
    get 
    { 
     return _seb.SEBDuration; 
    } 
    set 
    { 
     _seb.SEBDuration = value; 
     NotifyOfPropertyChange("SebDuration"); 
     NotifyOfPropertyChange("SebTotal"); 
    } 
} 
public decimal? SebAmountPer 
{ 
    get 
    { 
     return _seb.SEBAmountPer; 
    } 
    set 
    { 
     _seb.SEBAmountPer = value; 
     NotifyOfPropertyChange("SebAmountPer"); 
     NotifyOfPropertyChange("SebTotal"); 
    } 
} 
public decimal? SebTotal 
{ 
    get 
    { 
     if (_seb.SEBTotal.HasValue) 
     { 
      return _seb.SEBTotal; 
     } 
     if (SebAmountPer.HasValue && SebDuration.HasValue) 
     { 
      return SebAmountPer.Value * SebDuration.Value; 
     } 
     return null; 
    } 
    set 
    { 
     if (_seb.SEBTotal != value) 
     { 
      _seb.SEBTotal = value; 
      NotifyOfPropertyChange("SebTotal"); 
     } 
    } 
} 

如果我更换OnPropertyChanged每个NotifyOfPropertyChange,它会工作。

+0

这是什么NotifyOfPropertyChange方法?你自己创造了吗?这不是一个标准的方法,无论如何,所以我们不能在没有看到它的代码的情况下帮助你... –

+0

@ThomasLevesque它可能是Caliburn Micro。不是标准的WPF,也不是自定义的。 – BradleyDotNET

+0

@BradleyDotNET,很高兴知道,谢谢 –

回答

0

NotifyOfPropertyChanged(一个caliburn微观概念)期望一个lambda表达式返回要通知的属性。然后它使用反射来获取实际的字符串。实际上,你想这样称呼它:

NotifyOfPropertyChange(() => SebTotal); 

你的代码可能汇编因为框架只需要一个object(这String是),但随后在反射部分(显然)失败。

+1

实际上,它不使用反射; lambda参数是表达式树,不是委托;)。但无论如何,因为NotifyOfPropertyChange的重载需要一个字符串,我不认为这就是为什么它不起作用的原因... –

+0

也试过这种方法,并没有更新发生 – Master

+0

@ThomasLevesque这可能是的日期,但它肯定*看起来像反射... http://social.msdn.microsoft.com/Forums/silverlight/en-US/780cf8ef-4340-4e27-b240-7beef43c03a2/notifyofpropertychange-name?forum= silverlightmvvm – BradleyDotNET