如何在每次导航到页面时对其进行初始化(UWP C#)?

时间:2019-04-21 16:09:52

标签: 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”,并且我需要它是干净的状态。

谢谢。

1 个答案:

答案 0 :(得分:2)

我的猜测是您的LayoutTab页已设置为缓存,因此到同一页的每次导航都将加载其先前的属性

我的建议将在您的页面中将NavigationCacheMode设置为disabled之一:

  

以编程方式:

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

或XAML内部:

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

(由于docs指出默认缓存模式为NavigationCacheMode,您的disabled可能设置为“ Required”或“ Enabled”