Mathias F
Mathias F

Reputation: 15891

Navigating from one screen to another in Caliburn

I am using a sample from http://www.mindscapehq.com/blog/index.php/2013/09/11/caliburn-micro-part-6-introduction-to-screens-and-conductors/

There is an AppViewModel in which other ViewModels are activated by calling ActivateItem.

The sample is working for me: I can see the corresponding View.

I now want to activate a ViewModel from another ViewModel. It gets instantiated but the corresponding View is not displayed.

How can I activate "GreenScreenViewModel" from "RedScreenViewModel"?

AppView:

    <UserControl x:Class="CaliburnMicroApp_Navigation.AppView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
  <DockPanel  Background="LightBlue" MinHeight="400" MinWidth="400">
    <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" HorizontalAlignment="Center">
      <Button x:Name="ShowRedScreen" Content="Red" Width="50" />
      <Button x:Name="ShowGreenScreen" Content="Green" Width="50" Margin="12,0,0,0" />
      <Button x:Name="ShowBlueScreen" Content="Blue" Width="50" Margin="12,0,0,0" />
    </StackPanel>
    <ContentControl x:Name="ActiveItem" />
  </DockPanel>
</UserControl>

AppViewModel

public class AppViewModel : Conductor<object>
{
  public void ShowRedScreen()
  {
    ActivateItem(new RedViewModel());
  }

  public void ShowGreenScreen()
  {
    ActivateItem(new GreenViewModel());
  }

  public void ShowBlueScreen()
  {
    ActivateItem(new BlueViewModel());
  }
}

RedViewModel - this does not display GreenView ()

public class RedViewModel :   Conductor<object>
  {
      public void DisplayGreen()
      {
          ActivateItem(new GrenViewModel());
      }
  }

RedView

 <Grid Background="Red">
      <StackPanel>
    <TextBlock Text="red" FontSize="48" FontWeight="Bold" Foreground="#3CA527"  />
      <Button Name="DisplayGreen">
            <TextBlock >Next Screen</TextBlock>
        </Button>
        </StackPanel>
    </Grid>

Upvotes: 0

Views: 1095

Answers (1)

user1548266
user1548266

Reputation:

If you want the ActiveItem displayed in the ContentControl of your AppView to change when you press your Button in RedViewModel, you will need to use the EventAggregator to pass a message from your RedViewModel to your AppViewModel.

Mindscape EventAggregator tutorial

Upvotes: 1

Related Questions