我在页面上使用KeepAlive
属性,以便我能够在用户将其保留的状态下导航回到它。
用户可以搜索公司,在其他页面中查看公司的更多详细信息,然后导航回搜索页面中的搜索状态。
我还利用页面上的Loaded
事件进行设置,以便首先显示用户最喜欢的公司。
搜索后,当用户从详细信息页面导航回来时,不可避免地会触发Loaded事件并重置搜索,返回到Loaded方法中描述的状态。
我的问题是 - 有没有办法在第一次加载页面时触发Loaded事件,但是当它KeptAlive
并导航回来时,Loaded事件不会被触发?< / p>
我还希望有一种方法来取消这种行为,因为如果用户确实离开了搜索页面(即不到详细信息页面),我希望页面在用户导航到下次时触发Loaded事件它
编辑:
var estimatingContractsPage = new EstimatingContractsPage(selectedItem);
NavigationService?.Navigate(estimatingContractsPage);
答案 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;
}