Как инициализировать страницу при каждом переходе к ней (UWP C #)?

#c# #xaml #uwp

#c# #xaml #uwp

Вопрос:

Я использую pivot в UWP C #, когда каждый сводный элемент является страницей. При каждом нажатии на PivotItem переходите к регистру переключения и выбирайте, какую страницу (фрейм) загружать. Моя проблема в том, что в первый раз все работает нормально, но если я оставлю одну страницу и снова нажму на этот поворот, происходят странные вещи. Мне нужно, чтобы страница инициализировалась точно так же при каждом ее открытии

Сводная таблица в Xaml:

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

CS-код при нажатии PivotItem:

 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. Можете ли вы проверить, решает ли добавление NavigationCacheMode="Disabled" в ваш <Page> класс LayoutTab XAML вашу проблему?

2. Привет, я думаю, что это сработало, по крайней мере, сейчас я получаю нужные мне результаты, спасибо!

3. @Doedoe, ваше решение работает, вы могли бы опубликовать его в качестве ответа на этот вопрос.

4. @NicoZhu-MSFT готово.

Ответ №1:

Я предполагаю, что ваша LayoutTab страница настроена на кэширование, поэтому при каждом переходе на одну и ту же страницу будут загружаться ее предыдущие свойства

Мое предложение было бы установлено NavigationCacheMode на вашей странице disabled либо:

Программно:

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

или внутри XAML:

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

(для вас NavigationCacheMode может быть установлено значение «Обязательно» или «Включено», поскольку в документах указано, что режим кэша по умолчанию disabled )