Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当KeepAlive=”时防止加载事件;真WPF_C#_Wpf_Navigationservice - Fatal编程技术网

C# 当KeepAlive=”时防止加载事件;真WPF

C# 当KeepAlive=”时防止加载事件;真WPF,c#,wpf,navigationservice,C#,Wpf,Navigationservice,我在一个页面上使用KeepAlive属性,这样我就可以在用户留下它的状态下导航回它 用户可以搜索一家公司,在附加页面中查看该公司的更多详细信息,然后在保留搜索页面的搜索状态下导航回搜索页面 我还利用页面上的Loaded事件进行设置,首先显示用户最喜欢的公司 搜索后,当用户从详细信息页面返回时,不可避免地会触发加载的事件并重置其搜索,返回到加载方法中描述的状态 我的问题是-是否有一种方法可以在第一次加载页面时触发加载的事件,但是当它是KeptAlive并导航回时,不会触发加载的事件 我还更喜欢一种

我在一个页面上使用
KeepAlive
属性,这样我就可以在用户留下它的状态下导航回它

用户可以搜索一家公司,在附加页面中查看该公司的更多详细信息,然后在保留搜索页面的搜索状态下导航回搜索页面

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

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

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

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

编辑:

var估计合同价格=新估计合同价格(selectedItem);

导航服务?导航(估计合同空间)

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

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

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

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

一个简单的现实答案谢谢。我仍然不太确定我将如何处理实际导航到详细信息页面以外的其他地方-在这种情况下,我希望在用户返回时“加载”该页面。解决方法是知道何时导航到另一个页面。如何在页面之间导航?请检查编辑以了解我是如何导航的。我可以在导航时检查页面名称,并钩住/取消钩住我假设的已加载事件处理程序。我可以连接到NavigationService.Navigating事件,但我不确定如何检查事件的目的地。例如,是的。这只是定义条件的问题,也就是说,您可以检查任何其他条件,而不是简单地检查_isLoaded标志的值。关键是事件会被引发,但事件处理程序中的代码只会在特定情况下执行。我仍然不太确定我将如何处理实际导航到详细信息页面以外的其他地方-在这种情况下,我希望在用户返回时“加载”该页面。解决方法是知道何时导航到另一个页面。如何在页面之间导航?请检查编辑以了解我是如何导航的。我可以在导航时检查页面名称,并钩住/取消钩住我假设的已加载事件处理程序。我可以连接到NavigationService.Navigating事件,但我不确定如何检查事件的目的地。例如,是的。这只是定义条件的问题,也就是说,您可以检查任何其他条件,而不是简单地检查_isLoaded标志的值。关键是事件将被引发,但事件处理程序中的代码将仅在特定情况下执行。