2014-04-24 111 views
1

我坐在那裏,我相信我的系統已經開始打縮放問題的情景,我相信它不會做一些「正確的方式」的PropertyChanged事件需要觸發一次,每次點擊

基本上我有一個莖Silverlight項目,並在這個特殊的領域我的模型有很大的依賴性

int _Weight; 
    public int Weight 
    { 
     get { return _Weight; } 
     set 
     { 
      if (value != _Weight) 
      { 
       _Weight = value; 
       RaisePropertyChanged("Weight"); 
      } 
     } 
    } 

然後在該模型的外面,我的應用程序也鏈條額外的事件到PropertyChanged事件如下

myObject.PropertyChanged += UpdateUI; 

我的UpdateUI做了一堆圖形的東西,生成圖像的東西,綁定將迎合。

這個效果很好。

但現在假設我的Weight屬性對其他屬性也有影響,它們也會觸發它們的PropertyChanged事件(因爲它們應該這樣,所有綁定到這些屬性的UI字段都會被更新),但是它也會導致每次UpdateUI都會被關閉。

這意味着如果一個屬性也影響3個其他屬性,那麼當它真的需要在最後一個屬性後被觸發時,UpdateUI將觸發4次。

它不會破壞任何東西,只是覺得效率低下,架構不正確。

所以基本上什麼,我問的是,我怎麼能得到它認爲的屬性更改

感謝

回答

1

不知道你的架構,我有兩個IDE的我UpdateUI只有一次激發了每個系列。

  1. 這就是我會選擇,但需要更多的努力 - 設計您UpdateUI方法,以便它可以根據改變後的屬性更新,不能簡單地刷新整個UI當時,幾百的ViewModels變化之一的一個屬性。例如,如果PersonViewModel的年齡更改,只更新。
  2. 幾秒鐘後執行掛起的佈局更新。例如,你可以啓動某種定時器來檢查是否有掛起的佈局更新(你將不得不自己架構)並執行它們,或者最後一個依賴於你。這可以是有效的,但必須仔細設計。

我不熟悉Silverlight,只有WPF,但我猜也適用相同的原則。

+0

謝謝。第一個聲音比第二個聲音更安全(只是預測定時器沒有打勾的問題),也可能會影響應用程序對簡單屬性的響應(即在更新內容後等待下一個打勾)。第一聲​​聽起來更好,但我可能會搖一下,而不是基於某個屬性(其中有很多)更新它,我寧願讓它有一個排除列表,以便所有簡單屬性都可以工作,但我可以讓它忽略一些較重的屬性 - 這可能只是簡化代碼維護。謝謝你的提示! – Crudler

+0

我很高興能幫上忙。祝你今天愉快 :) –

相關問題