C# WPF MVVM сменить страницу

170
28 марта 2018, 02:05

Всем привет, пишу приложение в рамках (MVVM) в котором будет несколько кнопок по нажатию на каждую из которых, в отведенную область (допустим во frame, или как-нибудь иначе) должна загружаться новая view, но VM ДОЛЖНА ОСТАВАТЬСЯ ПРЕЖНЕЙ, т.е мне нужно одни и те же данные, (которые хранятся в модели) отображать по разному, как это реализовать?

Answer 1

Раз у вас одна и та же VM, то ваш вопрос реально о смене View, а значит, решать проблему нужно на уровне View.

Положим представления одно на одно в грид, и будем переключать их видимость в зависимости от нажатия кнопок. Чтобы одна кнопка отжималась при нажатии другой, используем стандартный трюк с ToggleButton.

Пишем:

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Тест" Height="400" Width="600">
    <Window.Resources>
        <BooleanToVisibilityConverter x:Key="B2V"/>
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid Margin="10">
            <Border BorderBrush="Red" BorderThickness="4" CornerRadius="15"
                    Visibility="{Binding IsChecked, ElementName=RedButton,
                                   Converter={StaticResource B2V}}">
                <TextBlock Text="{Binding}" Foreground="Red" FontSize="24"
                           HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
            <Border BorderBrush="Blue" BorderThickness="4" CornerRadius="15"
                    Visibility="{Binding IsChecked, ElementName=BlueButton,
                                   Converter={StaticResource B2V}}">
                <TextBlock Text="{Binding}" Foreground="Blue" FontSize="24"
                           HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
        </Grid>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"
                    Grid.Row="1" Margin="0,0,0,10">
            <RadioButton Style="{StaticResource {x:Type ToggleButton}}" x:Name="RedButton"
                         Margin="5,0" Width="100" IsChecked="True" Content="Красная"/>
            <RadioButton Style="{StaticResource {x:Type ToggleButton}}" x:Name="BlueButton"
                         Margin="5,0" Width="100" Content="Синяя"/>
        </StackPanel>
    </Grid>
</Window>

Результат:

READ ALSO
Шифрование потока

Шифрование потока

Делаю чат (клиент и сервер), при старте сервера пытаюсь зашифровать соединение через сертификат

146
Зависла установка monodevelop Mac OS

Зависла установка monodevelop Mac OS

Ввожу команды по инструкции с monodevelop

157
Как сделать массив double nullable

Как сделать массив double nullable

Как сделать массив double nullable?

157
Заполнить combobox данными из запроса (mvvm)

Заполнить combobox данными из запроса (mvvm)

Данный запрос наполняет DataGridМожно ли как то из этого же запроса наполнить combobox значениями колонки Manager_History

171