当 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;
}
我在页面上使用 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;
}