我在Windows Phone 7中有一個錄音應用程序。 該應用程序允許用戶播放錄製的聲音。VisualState綁定線程問題
我儘量堅持使用MVVM指南。
我在所有錄音列表中有一個播放/停止按鈕。每個錄音都有自己的ViewModel,除此之外,它還控制相應的播放/停止按鈕的外觀。
該按鈕具有在其樣式中定義的自定義視覺狀態。
的可視狀態是使用方法綁定到視圖模型的屬性,如下所示: http://tdanemar.wordpress.com/2009/11/15/using-the-visualstatemanager-with-the-model-view-viewmodel-pattern-in-wpf-or-silverlight/
已經實現了這個方法,每當我想改變戲的樣子/停止按鈕,我需要設置公共字符串屬性(命名爲「PlayStopVisualState」)在我的ViewModel「PlayingState」或「正常」,並將分配一個適當的視覺狀態,我的按鈕。
問題是,當用戶按下播放按鈕時,會在後臺線程中創建SoundEffectInstance,後臺線程播放聲音。線程然後等待播放結束。當錄製播放結束時(我必須在同一個後臺線程中跟蹤它,或者創建另一個用於跟蹤SoundEffectInstance.State),我將PlayStopVisualState屬性重新設置爲「Normal」,但我得到了一個跨線程引用異常。 MVVM是否專門設計用於允許開發人員在視圖模型中操作邏輯變量,而不必擔心View的變化如何反映在視圖中?
我知道我需要對Dispatcher線程中的PlayStopVisualState屬性進行調整,以便問題消失,但這是不對的。從我的角度來看,它擊敗了MVVM的全部目的,只留下組織優勢。
或者我做錯了什麼?謝謝。
更新: 我以
Deployment.Current.Dispatcher
解決該問題的工作,但在我看來,作爲一個非常「醜陋」的解決方案,因爲我幾乎全身都MVVM模式緊隨其後。
'每個錄音都有自己的ViewModel'不應該是一個模型嗎? – jv42
它可以是任何方式的邏輯。例如,電話頁面最有可能具有一個視圖模型和它依賴於UI的不同模型。但是當我們有一個控件的視圖模型時,例如每個列表項都可以在邏輯上擁有自己的視圖模型。就我個人而言,我並不認爲這是一種誤解。 –
我並不是說這是錯的,它似乎有點奇怪,所以我想知道它是否是一個錯字。 – jv42