Запустите представление (окно) после загрузки UserControl в WPF с использованием MVVM - PullRequest
0 голосов
/ 04 ноября 2011

У меня есть главное окно, в котором находятся два вида (пользовательские элементы управления). Один - UserControl1, а другой - UserControl2, следующий за системой переключения.

UserControl1 сначала загружается, а затем вид можно переключать. Я хочу запустить окно после загрузки UserControl1.

Я запускаю представления с использованием шаблона обмена сообщениями и регистрирую представления в app.xaml или MainView.xaml.

Как мне поступить?

Xaml для моего основного вида:

    <Window x:Class="CustomListView.MainView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:CustomView="clr-namespace:CustomListView"
        Title="MainView"
        Width="300"
        Height="300">
    <Window.InputBindings>
        <CustomView:RelayKeyBinding Key="F12"  CommandBinding="{Binding Path=Toggle}"></CustomView:RelayKeyBinding>
    </Window.InputBindings>
    <Window.Resources>
        <DataTemplate x:Key="ExecutionView">
            <CustomView:ExecutionView />
        </DataTemplate>
        <DataTemplate x:Key="ConfigView">
            <CustomView:ConfigView />
        </DataTemplate>
        <Style x:Key="mainContentControlStyle"
               TargetType="{x:Type ContentControl}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Mode}"
                             Value="1">
                    <Setter Property="ContentTemplate" Value="{StaticResource ResourceKey=ConfigView}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=Mode}"
                             Value="0">
                    <Setter Property="ContentTemplate" Value="{StaticResource ResourceKey=ExecutionView}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <ContentControl Content="{Binding}"
                        Style="{StaticResource ResourceKey=mainContentControlStyle}" />        
    </Grid>
</Window>

Если вам потребуется больше кода, я буду рад опубликовать его.

Заранее спасибо.

1 Ответ

0 голосов
/ 04 ноября 2011

Вы можете использовать EventTrigger для преобразования события Loaded окна в выполнение команды, а затем создать там свое окно. Это был бы мой код:

<UserControl>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
            <i:InvokeCommandAction Command="{Binding UserControl_LoadedCommand"} />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</UserControl>

Если вы используете MVVM Light , это код:

<UserControl>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
            <Galasoft_MvvmLight_Command:EventToCommand Command="{Binding UserControl_LoadedCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</UserControl>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...