我有一個左,右停靠面板的WPF窗體。左側面板具有一些用戶輸入,基於這些輸入,我可以在右側的停靠面板內創建並啓動不同的用戶控件。我們正在使用MMVM框架。目前,我們正在從表單的視圖模型創建和啓動用戶控件。我不確定這是否正確,因爲它似乎違反VM的MVVM規則不應訪問View。那是對的嗎?有沒有其他的設計可以使用(我想我也不能在代碼背後寫任何東西,對嗎?)。WPF窗體和用戶控件
0
A
回答
1
不,你不應該在ViewModel中有任何View特定的代碼。你可以有代碼隱藏,如果它純粹是UI(沒有業務邏輯)相關。
MVVM WPF Apps With The Model-View-ViewModel Design Pattern上有一篇關於MSDN的文章。我建議,在使用MVVM模式編寫任何WPF應用程序之前,請閱讀本文。
針對您的特殊情況下,我會在右側面板ContentControl
,並有獨立的ViewModel
s到備份不同UserControl
秒,然後有DataTemplates
定義,以顯示正確的UserControl
對於任何給定ViewModel
秒。
未經測試的僞代碼:
的DataTemplates
<DataTemplate DataType="{x:Type local:ViewModel1}">
<local:UserControl1 />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ViewModel2}">
<local:UserControl2 />
</DataTemplate>
你會在Window.Resources
部分或在ResourceDictionary
定義這些,包括那本字典在Window.Resources
ContentControl中
<ContentControl Content="{Binding CurrentContent}" />
在支持MainWindow的當前ViewModel中,您將擁有一個名爲CurrentContent
的屬性,當您將其設置爲正確的ViewModel實例時,屏幕上將顯示相應的關聯View/UserControl
。
UPDATE
您將有TabControl
,而不是ContentControl
,並有ObservableCollection
屬性(假設它被命名爲ContentItems
)在您的視圖模型,而不是CurrentContent。 TabControl
會在您向ObservableCollection
中添加/刪除項目時添加/刪除TabItems
。
<TabControl ItemsSrouce="{Binding ContentItems}" />
我從我的一個項目粘貼示例TabControl代碼。
<TabControl ItemsSource="{Binding Tabs}"
SelectedItem="{Binding SelectedTab}"
Margin="5"
Visibility="{Binding HasTabs, Converter={StaticResource VisibilityConverter}}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Header}"
Grid.Column="0"
TextTrimming="CharacterEllipsis"
ToolTip="{Binding Header}"
FontWeight="Bold"
TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
希望是有道理的
相關問題
- 1. WPF用戶控件和Windows窗體用戶控件在Windows窗體應用程序
- 2. Windows窗體:用戶控件和事件
- 3. 如何從WPF窗體值傳遞給WPF用戶控件
- 4. WinForms中的父窗體和子窗體用戶控件通信
- 5. WPF應用程序中的Windows窗體用戶控件
- 6. WPF窗口/用戶控件繼承XAML
- 7. 錯誤託管在WPF Windows窗體用戶控件時
- 8. WPF:將主窗體屬性傳遞給用戶控件
- 9. Windows窗體中WPF用戶控件的雙向DataBinding
- 10. 在Windows窗體中承載WPF用戶控件
- 11. 在Windows窗體中添加用戶控件(WPF)到面板c#
- 12. Windows窗體Web瀏覽器用戶控件在WPF中更新
- 13. windows窗體控件不是在WPF
- 14. Windows窗體中的WPF控件?
- 15. 如何根據數據庫條目在wpf窗體窗體中多次重複一個wpf用戶控件
- 16. 用戶控件與Windows窗體
- 17. Web窗體用戶控件渲染HTML
- 18. Windows窗體用戶控件問題
- 19. Windows窗體 - 自定義用戶控件
- 20. C#Windows窗體用戶控件
- 21. WPF用戶控件
- 22. WPF用戶控件
- 23. WPF用戶控件和外部事件
- 24. 窗口和用戶控件中的WPF綁定
- 25. Windows窗體 - 從窗體傳遞值到用戶控件
- 26. 訪問沒有窗體實例的VBA用戶窗體控件
- 27. 線程調用窗體窗體控件
- 28. 用戶窗體上的其他用戶窗體控件的設置值關閉
- 29. .Net:如何在Windows窗體應用程序中使用WPF用戶控件?
- 30. 與WPF用戶控件和MVVM
謝謝你的回覆。它變得更有意義,看起來更乾淨。 如果我想要同時加載多個用戶控件(可能在不同的選項卡中,根據需要創建一個新的控件),該怎麼辦?我猜測結構會改變,但不完全確定如何。 – Padmaja
不確定,如果我正確理解你的評論,但請檢查我的更新答案,看看是否有道理。 – sthotakura
非常好。謝謝。 – Padmaja