C# WPF Intercept GoBack()事件

C# WPF Intercept GoBack()事件,c#,wpf,.net-core,navigation,C#,Wpf,.net Core,Navigation,我正在.NETCore3.1中创建一个WPF应用程序。我用一个主窗口构建了这个项目,并使用不同页面之间的导航。 在主页中我有一个标签,在C文件中我使用以下代码: public partial class Main : Window { private void ListProducts_Click(object sender, RoutedEventArgs e) { Frame.NavigationService.Navigate(new ListProduct

我正在.NETCore3.1中创建一个WPF应用程序。我用一个主窗口构建了这个项目,并使用不同页面之间的导航。 在主页中我有一个标签,在C文件中我使用以下代码:

public partial class Main : Window
{
    private void ListProducts_Click(object sender, RoutedEventArgs e)
    {
        Frame.NavigationService.Navigate(new ListProducts(Frame));
    }
}
public partial class AddProduct : Page
{
    private void Close_Click(object sender, RoutedEventArgs e)
    {
        frame.NavigationService.GoBack();
    }
}
从这一页我转到另一页做一些事情:

public partial class ListProducts : Page
{
    private void Add_Click(object sender, RoutedEventArgs e)
    {
        frame.NavigationService.Navigate(new AddProduct(Frame));
    }
}
然后我用下面的代码返回:

public partial class Main : Window
{
    private void ListProducts_Click(object sender, RoutedEventArgs e)
    {
        Frame.NavigationService.Navigate(new ListProducts(Frame));
    }
}
public partial class AddProduct : Page
{
    private void Close_Click(object sender, RoutedEventArgs e)
    {
        frame.NavigationService.GoBack();
    }
}

将框架从一页注入到另一页。使用GoBack()时,我希望捕获并触发ListProducts页面中的一些事件。如何在父窗口中截获GoBack()事件?

您可以处理
列表产品的
加载的
事件,并在事件处理程序中执行所需的任何逻辑:

public partial class ListProducts : Page
{
    private readonly Frame _frame;

    public ListProducts(Frame frame)
    {
        InitializeComponent();
        Loaded += OnLoaded;
        _frame = frame;
    }

    private void OnLoaded(object sender, RoutedEventArgs e)
    {
        if (_frame.CanGoForward)
        {
            //handle navigate back logic here...
        }
    }
}

将“关闭”按钮移动到父窗口,您甚至可以将其显示在框架上方,单击关闭当前页面。顺便说一句,学习MVVM和绑定将为您打开WPF的威力。NavigationWindow+Frame+Page在WPF中不是一种流行的做法,因为它是由Microsoft以错误的方式设计的,包含不需要的限制。@MicheleBoscagin:
ListProducts
不可能截获在
AddProduct
中发生的内容。您的意思是,当它被导航回时,您想在
ListProducts
中执行一些操作,还是想根据某些逻辑阻止导航的发生?@mm8否,只需在ListProduct从AddProduct导航回时,在ListProduct中执行一些操作即可