KeepAlive =“True WPF时阻止加载事件

时间:2017-06-09 10:17:33

标签: c# wpf navigationservice

我在页面上使用KeepAlive属性,以便我能够在用户将其保留的状态下导航回到它。

用户可以搜索公司,在其他页面中查看公司的更多详细信息,然后导航回搜索页面中的搜索状态。

我还利用页面上的Loaded事件进行设置,以便首先显示用户最喜欢的公司。

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

我的问题是 - 有没有办法在第一次加载页面时触发Loaded事件,但是当它KeptAlive并导航回来时,Loaded事件不会被触发?< / p>

我还希望有一种方法来取消这种行为,因为如果用户确实离开了搜索页面(即不到详细信息页面),我希望页面在用户导航到下次时触发Loaded事件它

编辑:

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

1 个答案:

答案 0 :(得分:2)

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

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;
}