我創建使用MVVM框架中的WPF應用程序,我已經從約什 - 史密斯對MVVM here...綁定的TabControl的ItemsSource到的ViewModels的一個ObservableCollection導致內容刷新焦點
文章更重要的是通過了幾項功能,我將TabControl綁定到ViewModels的ObservableCollection。這意味着我正在使用一個標籤式MDI接口,它將UserControl顯示爲TabItem的內容。我在應用程序中看到的問題是,當我有多個選項卡並且在選項卡之間來回切換時,每次更改選項卡時都會引用內容。
如果你下載Josh Smith的源代碼,你會發現他的應用程序有同樣的問題。例如,點擊「查看所有客戶」按鈕並向下滾動到ListView的底部。接下來點擊「創建新客戶」按鈕。當您切換回所有客戶視圖時,您會注意到ListView滾動回頂端。如果您切換回新客戶選項卡並將光標置於其中一個文本框中,然後切換到所有客戶選項卡並返回,您會注意到光標現在不見了。
我想這是因爲我使用的是ObservableCollection,但我無法確定。有什麼方法可以防止標籤的內容在收到焦點時刷新?
編輯: 我在我的應用程序上運行profiler時發現我的問題。我定義一個DataTemplate我的ViewModels所以它知道如何渲染視圖模型時,它會顯示在標籤......像這樣:
<DataTemplate DataType="{x:Type vm:CustomerViewModel}">
<vw:CustomerView/>
</DataTemplate>
所以每當我切換到不同的選項卡,它必須重新再次創建ViewModel。我通過將我的ViewModels的ObservableCollection更改爲UserControls的ObservableCollection來臨時修復它。但是,如果可能的話,我仍然會喜歡使用DataTemplates。有沒有辦法讓DataTemplate工作?
我試過了,但沒有奏效。我已經更新了我的問題,請告訴我是否可以提供任何輸入。謝謝。 – Brent 2010-05-08 15:45:48