2012-01-13 111 views
2

我正在編寫一個連接到網絡資源的應用程序。在MVVM中實現臨時覆蓋的最佳方法

當應用程序連接時,我想彈出一個覆蓋圖,其中包含通常的spinkin進度圖形和取消按鈕。我設計了一個ConnectProgressViewModel和匹配ConnectProgressView的覆蓋。

我的問題是什麼是最清潔的方式來顯示/隱藏父視圖模型的覆蓋?

A)暴露從我父視圖模型常數ConnectProgressViewModel,並有ConnectProgressView其知名度綁定到ConnectProgressViewModel.IsConnecting財產。

B)暴露從父視圖模型的通用Overlay財產,它當用戶想要連接設置爲ConnectProgressViewModel。父視圖將ContentControl綁定到此Overlay屬性,數據模板處理其餘部分。

C)

第一個似乎封裝功能更多,與應用程序不必關心顯示和隱藏覆蓋,但暴露一個常數ConnectProgressViewModel時感覺不對,只是偶爾顯示。

第二種似乎更適合MVVM,ConnectProgressViewModel僅在需要時才創建,但它將更多功能放在父級上,而且通用Overlay屬性也有點奇怪。

乾杯

編輯:

我要澄清,這個觀點並不僅僅是顯示忙碌狀態。它允許取消/重試和選擇不同的網絡資源等。爲了簡潔起見,我省略了這些細節,這可能是人們專注於繁忙指標時的錯誤。

回答

1

我總是使用Silverlight Toolkit中的BusyIndicator。它沒有取消按鈕,但你可以設計一個取消按鈕。 BusyIndicator有一個IsBusy屬性,我綁定到我的ViewModel上的IsBusy屬性。如果您將控件設置爲具有按鈕,則可以向ViewModel添加取消命令。

編輯

我剛纔看到的,這是不是WPF的Silverlight。我不知道如果WPF工具包具有BusyIndi​​cator控件

再次編輯

它看起來像Extended WPF Toolkit有BusyIndi​​cator控件。請注意,我沒有這方面的經驗。

+0

但是,如何顯示/隱藏BusyIndi​​cator? – GazTheDestroyer 2012-01-13 14:29:47

+0

BusyIndi​​cator在IsBusy爲true時自動顯示,當IsBusy爲false時會自動顯示。 – cadrell0 2012-01-13 14:30:58

+0

是的,只是看了一下WPF Toolkit版本,謝謝。它似乎在所有的時間,並顯示/隱藏自己像我的A)。 – GazTheDestroyer 2012-01-13 14:33:25

1

我會用類似於你在A)的建議去解決問題,並且認爲你不應該像B一樣實現一些通用的東西),直到你真正具有這種靈活性作爲一個需求,就像能夠顯示不同的覆蓋視圖一樣。

保持簡單!