簡體   English   中英

WPF表單和用戶控件

[英]WPF Form and User Controls

我有一個帶有左和右停靠面板的WPF表單。 左側面板具有一些用戶輸入,根據這些輸入,我可以在右側底座面板中創建和啟動不同的用戶控件。 我們正在使用MMVM框架。 當前,我們正在從表單的視圖模型創建和啟動用戶控件。 我不確定這是否正確,因為它似乎違反了VM的MVVM規則,因此不應訪問View。 那是對的嗎? 有沒有我可以使用的替代設計(我想我也不能在背后的代碼中寫任何東西,對嗎?)。

不,您不應在ViewModel中包含任何特定於View的代碼。 如果它與UI(完全沒有業務邏輯)相關,則可以隱藏代碼。

在MSDN上有一篇有關Model-View-ViewModel設計模式的 MVVM WPF應用的精彩文章。 我建議您在使用MVVM模式編寫任何WPF應用程序之前先閱讀本文。

對於您的特定情況,我將在右側面板中使用ContentControl ,並使用單獨的ViewModel來支持不同的UserControl ,然后定義DataTemplates以顯示任何給定ViewModel的正確UserControl

未經測試的偽代碼:

數據模板

<DataTemplate DataType="{x:Type local:ViewModel1}">
   <local:UserControl1 />
</DataTemplate>

<DataTemplate DataType="{x:Type local:ViewModel2}">
   <local:UserControl2 />
</DataTemplate>

您可以在Window.Resources部分或ResourceDictionary定義它們,並在Window.Resources包含該詞典。

內容控件

<ContentControl Content="{Binding CurrentContent}" />

在支持MainWindow的當前ViewModel中,您將擁有一個名為CurrentContent的屬性,並將其設置為正確的ViewModel實例時,適當且關聯的View/UserControl將出現在屏幕上。

UPDATE

您將在ViewModel中使用TabControl而不是ContentControl並在您的ViewModel中(而不是CurrentContent)具有ObservableCollection屬性(假設它名為ContentItems )。 當您將項目添加到ObservableCollection或從ObservableCollection移除項目時, TabControl將添加/移除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>

希望有道理

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM