Запустите представление (окно) после того, как UserControl загружен в WPF с использованием MVVM
У меня есть главное окно, в котором размещены два представления (пользовательские элементы управления). Один UserControl1
а другой UserControl2
следуя системе переключения.
UserControl1
сначала загружается, а затем вид может быть переключен. Я хочу запустить окно после UserControl1
загружен.
Я запускаю представления с использованием шаблона обмена сообщениями и регистрирую представления в app.xaml
или же MainView.xaml
,
Как мне поступить?
Xaml для моего MainView:
<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 ответ
Решение
Вы можете использовать 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>