Home > Enterprise >  How can I change a "Frame Content" in another class? (C# WPF XAML)
How can I change a "Frame Content" in another class? (C# WPF XAML)

Time:10-16

once to explain, I open a xaml page via "frame.content" and in this page I have opened, I want to open another one but on the frame where the second page is running. but i can't open the page,

nothing happens. not even an expection.

So here what I have written:


This is the class from the page that is open

private void bttn_start(object sender, RoutedEventArgs e)
{
   MainWindow mw = new MainWindow();
   mw.JoinNextPage();
}

This is the MainWindow class where the frame is.

public partial class MainWindow : Window
{ 
   public void JoinNextPage() => pageMirror.Content = new page_finish();
}

I would appreciate any helpful tips, because yesterday I spent several hours looking on the internet and found nothing.

CodePudding user response:

Try this:

private void bttn_start(object sender, RoutedEventArgs e)
{
   MainWindow mw = (MainWindow)Application.Current.MainWindow;
   mw.JoinNextPage();
}

CodePudding user response:

You should use RoutedCommand to trigger the Frame navigation instead of the static MainWindow reference.

This removes the complete navigation logic (button event handlers) from your pages.

MainWindow.xaml.cs

public partial class MainWindow : Window
{
  public static RoutedCommand NextPageCommand { get; } = new RoutedCommand("NextPageCommand", typeof(MainWindow));

  public MainWindow()
  {
    InitializeComponent();

    CommandBindings.Add(
      new CommandBinding(NextPageCommand, ExecuteNextPageCommand, CanExecuteNextPageCommand));      
   }

  private void CanExecuteNextPageCommand(object sender, CanExecuteRoutedEventArgs e)
  {
    e.CanExecute = true;
  }

  private void ExecuteNextPageCommand(object sender, ExecutedRoutedEventArgs e)
  {
    // Logic to select the next Frame content
    JoinNextPage();
  }
}

MainWindow.xaml

<Window>
  <Frame>
   <Frame.Content>
     <Page>
       <Button Command="{x:Static local:MainWindow.NextPageCommand}" 
               Content="Next Page" />
      </Page>
    </Frame.Content>
  </Frame>
</Window>
  • Related