2011-06-20 23 views
1

我沒能找到關於這一主題的討論,但我認爲它很重要,那裏有它的存在,所以生病是gladful讀一個很大的機會。查看模型我們是否檢查setters中的等式,還是隻設置&always always?

在我們的屬性viewmodel setter中,我們可以檢查提供的值是否等於當前值,並且只在這種情況下通知,或者我們可以忽略該檢查並立即設置通知&。

雖然此檢查看起來令人愉快,因爲它節省了一些資源,當VM上的「刷新」不會導致View重繪時,它也可能會帶來一些不好的影響,當View稍微複雜一些,放入虛擬機或將其放入虛擬機中與將其保留在View中相比太困難了。

所以一般我與MVVM經驗時,該檢查按預期工作防止一些代碼,我能想到的情景。所以目前我認爲這個檢查是一件危險的事情,有時候通常不值得使用挽救重繪。

此外,有時候這種檢查可以用來替代更好的程序邏輯,例如在VM上有2個屬性實際上是緊密連接的,比如字符串&某個實體的對象表示。所以當你設定例如字符串,它裏面調用一個物體設定太多,如果正確驗證,而這種平等檢查從對象<的無限循環節約的情況 - >串制定者,但在這種情況下,我認爲它要好得多引進一個標誌這是在setter中檢查的,如果不需要時不調用另一個,當調用對象設置器來自調用字符串設置器時。

我認爲這個檢查主要是用於我剛纔所描述的,我認爲情況是不完全執行檢查一個很好的理由。

那麼我們應該如何編寫我們制定者?

編輯:只是爲了給出一個場景,最簡單也是最愚蠢的一個會是這樣的:如果我們有一個OneWay綁定到View從VM,並且出於某種原因,View代碼隱藏中存在一些處理器直接更改View,導致它變得與VM不同步,刷新虛擬機無法幫助。當然很明顯,在這種情況下,我們應該調用VM綁定器,但我認爲在某些情況下,解決方案變得不那麼透明時,情況可能會更加複雜和先進。所以情景是愚蠢的,但有一個檢查會阻止正確的行爲。我會想更上了一個現實世界的例子在那裏它不是那麼容易解決,但可能會需要一些時間..

+0

您能描述檢查引入問題的情況嗎?這聽起來似乎有可能是其他奇怪的事情,因爲它是一個問題。 –

+0

我可以閱讀這個作爲「使用檢查」的答案嗎?:)讓我想一下例子雖然.. –

+0

不一定,但我肯定會說,如果檢查導致問題,這是一個引起關注的原因*爲了這個問題。 –

回答

2

在我個人的經驗中,我發現這個檢查非常有用,我總是把相等檢查放在setter中,以確保如果沒有必要刷新綁定值,那麼我不應該調用屬性更改,也不應該強制視圖在完全不需要時刷新該值。

談到平等檢查造成你麻煩的場景,我認爲在場景中肯定有些奇怪,或者你很可能會錯誤地處理某些事情,否則我已經使用了很多MVVM,並且沒有找到這樣的場景在我的情況。即使存在不平等檢查可能有意義的情況,我也不會停止使用平等檢查,因爲我在少數情況下會遇到一個小問題。我會嘗試在特定問題情況下采取一些解決方法以避免問題,而不是在設置者中使用相等性檢查

+0

我認爲你畢竟是對的。我描述的所有奇怪場景似乎都來自OneWay綁定,因爲TwoWay幾乎不允許控制 - 它的綁定屬性不同步。這只是意味着在與代碼隱藏的單向綁定UI進行交互時需要注意 –

0

一般cheking是當值改變它阻止你做特別是當你射擊的一些事件好主意一些不必要的甚至不想要的工作要完成。 我不明白爲什麼你想要在事件發生時觸發事件。如果你願意,那麼最好是手動開火,然後做別人可能不期望的事情。

相關問題