2013-08-01 70 views
2

我使用的是MVVM光源,我有一個視圖模型,但我不確定是否應該移動一些屬性,因爲我現在已經有了很多。我應該將某些屬性移動到模型中嗎?

Eventhough他們大部分簡單的屬性,我的視圖模型是有點越來越長(437線性質在)

我想知道它是否會做出一些有意義的搬出一些屬性出成模型,從某種意義上說,它更容易找到更重要的屬性。

我在我的wp7視圖上有5個控件。

5屬性的IsEnabled(如果位置服務被關閉,那麼所有屬性被禁用)升來存儲用戶選擇

3箇中繼命令值

6性能。

1屬性根據所選內容隱藏/顯示控件。

我仍然在頁面上工作,所以最終可能會有更多。

我想知道如果我應該拿出6個屬性來存儲來自用戶的信息並將其製作成模型。

然後只是有像繼電器命令,Visablity,在ViewModel中啓用的東西,並有一個屬性,當然有我的模型類。

回答

0

擁有精益視圖模型總是一件好事。這使得以後對其他開發人員(或您自己)的管理和理解變得更加容易。

將您的域特定數據提取到模型中始終是件好事。假設你想在以後的其他視圖中引用該用戶 - 一切堆積到視圖模型中,則每次創建新視圖模型時都必須複製大量代碼。不好。

如果你拉說,用戶到它自己的域模型對象,那麼你可以簡單地引用用戶用一個單一的代碼行(並很容易通過getter和setter方法訪問其屬性。

記住,MVVM代表模型,視圖,視圖模型,沒有模型,你不得不擁有潛在幾乎混亂的代碼和大量複製。代碼複製導致人爲錯誤,同時複製和大量其他麻煩。


現在是這樣的我知道你在問你應該如何管理你的「臨時」屬性(哪個用戶填寫),我必須說在這裏適用相同的規則如上。擁有多個模型並不是一件壞事(如果在企業環境中工作已經教會了我什麼,它不會害怕將代碼拆分成可管理的大小)。

您可以使用的另一種方法是爲您的視圖模型創建父類以繼承。在這裏放置任何「我將需要這些用於所有視圖」屬性,具體信息留在繼承超類的視圖模型中。

我注意到的第三件事是你有一個「isEnabled」屬性爲您的每個控件。如果你有一個「全部或全部」的情景,就像你描繪的那樣,你只需要一個。將該屬性綁定到所有元素的可見性,並簡化您的可見性管理六倍=)

希望這清除了幾件事! =)

+0

是的,它是全有或全無。這是一個好主意,只有一個屬性。出於某種原因,我認爲他們都需要自己的,但因爲它是全部或沒有。我不清楚你會例如把isEnabled放在模型中還是保留在View中?它只有一個getter(檢查位置服務是否打開或關閉)。與Visablity相同 – chobo2

+0

我會保留視圖模型中的任何控件特定信息,因爲它是特定視圖。您可以將其視爲「信息」 - 您可能希望推送到服務器或堅持存儲的東西,這是您放入模型的東西。你可能想發送到另一個視圖的東西 - 這是你放入模型的東西。 祝你好運! –

+0

好吧,如果我這樣做,但我會在模型中獲取一些信息在服務器上的屬性,並根據該信息控件應隱藏或顯示。如果我有在VIEWMODEL中顯示/隱藏控件的代碼,它是如何工作的?我是否需要做一個信使或其他信息來說明它需要隱藏起來? – chobo2

0

無論什麼視圖應該在你的viewModel。理想情況下,您不希望僅僅因爲您的視圖需要更新模型。任何這樣的事情都會進入ViewModel。如上所示,您可以拆分視圖模型。不需要一個一對一的視圖映射來查看模型。視圖可以由許多視圖模型組成。

通過437行屬性你的意思是說你有437個屬性?如果這種情況對您的觀點本身來說太過分了,我會重新考慮將您的觀點分解爲更簡單的可用性觀點。

Here是幾個常見的場景,我們常遇到在使用MVVM

相關問題