2014-05-12 48 views
0

當某個事件(IEventAggregator)發生時,我目前需要設置我的TabControl的SelectedIndex屬性,並考慮如何實現該屬性。GetView()vs ViewModel中的屬性

我想出了兩個可能性:

  • 使用GetView()通過ViewAware爲了訪問我的TabControl和SelectedIndex的設置爲我的價值
  • 使用屬性在我相關的ViewModel和綁定這個屬性來提供我的TabControl的SelectedIndex屬性通過XAML

這兩個選項都工作正常,但我個人希望得到這個問題的答案,因爲這不是我第一次想知道其中在這種情況下實現功能。

我知道第一個選項不會啓用通知支持,但除此之外:什麼是正確的方法?

+1

我通常將選項卡作爲VM中的模型公開,並在VM上具有SelectedItem屬性。將選項卡控件的ItemsSource綁定到集合,並將SelectedItem綁定到VM上。 – Will

+0

對,我也一樣。不過,我認爲當我們通過GetView方法訪問控件時,我們最終會減少代碼。我不確定這是否是一種好方法。 – 0x8BADF00D

+0

所以,你想知道你是否應該將你的代碼隱藏到ViewModel中? :| – Will

回答

0

有一個GetView()方法直接從視圖模型操縱視圖完全打破了MVVM。你可能只是把你所有的邏輯放在代碼隱藏之中。 MVVM的重點是將實際視圖抽象出來,以便與邏輯分離,並且可以對應用程序進行單元測試。

如果您在將來改變了有關選項卡的想法並決定以某種其他方式顯示多個視圖,該怎麼辦?您現在必須開始編輯您的視圖模型來編輯新的視圖,而不是隻調整一些XAML。

而對於單元測試,你將無法嘲笑你的TabControl。

+0

就是這樣,謝謝。我完全忘了抽象! – 0x8BADF00D