2012-11-09 150 views
0

我使用後臺進程和MVP模式開發應用程序。 我可以在ModelProcess(模型)存儲(isCanceled,isStarted或isPaused得到)的過程狀態是這樣的:如何在模型屬性發生變化時觸發事件

public event EventHandler CancelChanged; 
    bool isCanceled = false; 
    public bool IsCanceled 
    { 
     get { return isCanceled; } 
     set 
     { 
      isCanceled = value; 
      if (isCanceled) 
      { 
       if (CancelChanged != null) 
       { 
        CancelChanged(this, EventArgs.Empty); 
       } 
      } 
     } 
    } 
+0

你應該採取if(isCanceled)off。否則,只有在isCanceled設置爲true時纔會通知您。您可能會遇到可能會在狀態之間來回切換的情況。 – Arthis

回答

1

你的setter方法只調用CancelChanged如果isCanceled被設置爲true,不管它一直false之前。下面的代碼將檢查是否有值的實際更改,這使得它是冪等的。

set 
{ 
    if (value != isCanceled) 
    { 
     isCanceled = value; 
     if (CancelChanged != null) 
     { 
      CancelChanged(this, EventArgs.Empty); 
     } 
    } 
} 
+0

謝謝,但在我的情況下沒有任何區別。我只問MVP模式。進程的狀態是否可以存儲在模型層中? –

+0

我想不出你不應該能夠這樣做的原因。你可以在你的模型類中存儲你喜歡的任何東西。 –

+0

對我來說,在爲該事件選擇名稱CancelChanged時,您冒着代碼可讀性問題冒險,因爲它暗示它反映了對Canceled屬性的任何更改,而不僅僅是從true更改爲false。沒有更好的名字,比如CancellationReversed?只是我的2c – fsimonazzi

相關問題