WPF使用Prism

时间:2018-08-13 06:39:19

标签: wpf mvvm prism

我在寻找一个提示或只是一个方向来设计所需的结构,因为它有点棘手。我正在使用MVVM和Prism。

我有2个区域,一个具有2个按钮和一个tabcontrol区域。单击button1后,我想将3个视图作为选项卡注入tab控件中。单击button2之后,我想从button1中删除选项卡(但保留数据在后面),然后再次将3个视图作为选项卡注入tabcontrol中。这是棘手的部分:-),它应该动态发生,并且button1和button2的3个视图中的2个基于相同的视图/视图模型。

我对我能得到的一切表示感谢:-D

1 个答案:

答案 0 :(得分:1)

您应该能够使用ViewModel first方法来执行此操作。这是一种快速而肮脏的方法,可以根据自己的需要进行清理。

View / ViewModel结构:

View1-ViewModel1:IViewModel

View2-ViewModel2:IViewModel

View3-ViewModel3:IViewModel

IViewModel需要“内容”字符串属性

MainWindow.xaml

xpath='//*[@id="peoplegrid"]/div['+str(i)+']/div[1]/a'

MainViewModel.cs

<Window x:Class="SFQ1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:SFQ1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:MainViewModel/>
    </Window.DataContext>
    <Window.Resources>
        <DataTemplate DataType="{x:Type local:ViewModel1}">
            <local:View1/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:ViewModel2}">
            <local:View2/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:ViewModel3}">
            <local:View3/>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="50"/>
        </Grid.RowDefinitions>
        <TabControl Grid.Row="0" ItemsSource="{Binding VmObservable}">
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Content}"/>
                </DataTemplate>
            </TabControl.ItemTemplate>
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <ContentControl Content="{Binding}">
                    </ContentControl>
                </DataTemplate>
            </TabControl.ContentTemplate>
        </TabControl>
        <Button Grid.Row="1" Margin="10,0,0,0" Width="100" Content="1" 
                HorizontalAlignment="Left" Command="{Binding SetOneCommand}"/>
        <Button Grid.Row="1" Margin="130,0,0,0" Width="100" Content="2" 
                HorizontalAlignment="Left" Command="{Binding SetTwoCommand}"/>
    </Grid>
</Window>