当 KeepAlive="True WPF 时防止加载事件

Prevent Loaded Event when KeepAlive="True WPF

我在页面上使用 KeepAlive 属性,以便我能够以用户离开时的状态导航回该页面。

用户能够搜索公司,在附加页面中查看公司的更多详细信息,然后以他们离开时的搜索状态导航回搜索页面。

我还利用页面上的 Loaded 事件将其设置为首先显示用户最喜欢的公司。

搜索后,当用户从详细信息页面导航回来时,不可避免地会触发 Loaded 事件并重置他们的搜索,返回到 Loaded 方法中描述的状态。

我的问题是 - 有没有一种方法可以在第一次加载页面时触发 Loaded 事件,但是当它 KeptAlive 并导航回来时,不会触发 Loaded 事件?

我也更喜欢一种取消附加此行为的方法,因为如果用户确实离开搜索页面(即不转到详细信息页面),我希望该页面在下次说用户时触发 Loaded 事件导航到它。

编辑:

var estimatingContractsPage = new EstimatingContractsPage(selectedItem); NavigationService?.Navigate(estimatingContractsPage);

每次 Page 实际加载到您的 UI 时,都会触发 Loaded 事件。但是,如果您只创建 Page class 的单个实例,则可以使用布尔标志来确保 事件处理程序 中的代码仅运行一次:

public partial class Page1 : Page
{
    public Page1()
    {
        InitializeComponent();
        this.Loaded += Page1_Loaded;
    }

    private bool _isLoaded;
    private void Page1_Loaded(object sender, RoutedEventArgs e)
    {
        if(!_isLoaded)
        {
            //Your code

            _isLoaded = true;
        }
    }
}

另一种选择是在事件处理程序被调用后简单地取消挂钩:

public Page1()
{
    InitializeComponent();
    this.Loaded += Page1_Loaded;
}

private void Page1_Loaded(object sender, RoutedEventArgs e)
{
    //Your code
    this.Loaded -= Page1_Loaded;
}