c# - 如何在每次导航到页面时初始化页面(UWP C#)?

标签 c# xaml uwp

当每个 PivotItem 都是一个页面时,我在 UWP C# 中使用数据透视。每次按 PivotItem 都会转到开关盒并选择要加载的页面(框架)。我的问题是,第一次一切正常,但如果我离开一页并再次按该枢轴,就会发生奇怪的事情。我需要每次打开页面时都以完全相同的方式初始化

Xaml 中的枢轴:

<Pivot x:Name="XmlConfigPivot" SelectionChanged="XmlConfigPivot_SelectionChanged">
        <PivotItem Header="Stub_Tab">
            <Frame/>
        </PivotItem>
        <PivotItem Header="Layout">
            <Frame/>
        </PivotItem>
 </Pivot>

按下 PivotItem 时的 CS 代码:

private void XmlConfigPivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
        PivotItem item = ((sender as Pivot).SelectedItem) as PivotItem;
        string header = item.Header.ToString();
        Frame frame = item.Content as Frame;
        switch (header)
        {
            case "Layout": frame?.Navigate(typeof(LayoutTab)); break;
            case "Stub_tab": frame?.Navigate(typeof(StubTab)); break;
        }
}

“LayoutTab”是一个 XAML+CS 页面,它在初始化时执行一些操作,它所做的事情并不真正相关,但每次打开它时都需要清理干净。

布局仅作为示例(真正的逻辑太复杂,无法放在这里):

public sealed partial class LayoutTab : Page
{
    public ObservableCollection<Sensor> sensorsCollection = new ObservableCollection<Sensor>();
    public ObservableCollection<Axis> axisesCollection = new ObservableCollection<Axis>();
    int selectedSensor = -1;

    static bool isInitializes = false;

    public LayoutTab()
    {
        InitData();
        InitializeComponent();
        isInitializes = true;
    }
}

我的问题是每次我进入页面时它都会记住上次访问的内容,例如变量“sensorsCollection”,并且我需要它是干净的。

谢谢。

最佳答案

我的猜测是您的 LayoutTab 页面设置为缓存,以便每次导航到同一页面时都会加载其以前的属性

我的建议是将页面中的 NavigationCacheMode 设置为禁用:

Programmaticaly:

public LayoutTab()
{
    InitData();
    InitializeComponent();
    isInitializes = true;
    NavigationCacheMode = NavigationCacheMode.Disabled
}

or Inside XAML:

<Page ...
      NavigationCacheMode="Disabled"
/>

(您的 NavigationCacheMode 可能设置为“必需”或“启用”,因为 docs 声明默认缓存模式为禁用)

关于c# - 如何在每次导航到页面时初始化页面(UWP C#)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55784396/

相关文章:

WPF通过子容器滚动父容器

c# - 使用 UWP API 在 Win32 桌面应用程序中枚举 BLE 设备时出现问题

c# - 如何优雅地关闭异步服务器套接字? C#

c# - ViewDidAppear 导致我的标签消失(Xamarin.ios,C#)

c# - 根据成员对象列表过滤 LINQ 查询

Xamarin.Forms map 自动关注用户位置

c# - 有没有办法为已编译的绑定(bind)获取 UpdateSourceTrigger=PropertyChanged?

c# - XSD 模式到 COM 接口(interface)

c++ - WP8.1 认证 - 6.5.1 - 使用 XAML/C++ 的初始启动功能

.net - WPF 防止动态网格内容超出父级大小