【发布时间】:2020-01-20 10:05:57
【问题描述】:
我有一个带有枢轴控件的 UWP 页面。我正在使用 MVVM 模式,其中枢轴的ItemsSource 属性绑定到我的视图模型的可观察集合。我正在使用枢轴的ItemTemplateSelector 根据枢轴SelectedItem 为每个视图模型选择适当的DataTemplate,而枢轴又绑定到选定的视图模型。
这是我正在使用的 XAML:
<Pivot Grid.Column="1" Grid.Row="1" Grid.RowSpan="2" Margin="10"
IsHeaderItemsCarouselEnabled="False"
ItemsSource ="{x:Bind MainPageViewModel.EditViewModels}"
SelectedItem="{x:Bind MainPageViewModel.SelectedEntityViewModel,Mode=TwoWay}"
ItemTemplateSelector="{StaticResource DetailViewTemplateSelector}" >
<Pivot.HeaderTemplate>
<DataTemplate x:DataType="viewModel:DetailViewModelBase">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding TabHeader,Mode=OneWay}" FontSize="12"
VerticalAlignment="Center"/>
</StackPanel >
</DataTemplate>
</Pivot.HeaderTemplate>
</Pivot>
在同一页面中,我有一个导航视图,其中 navigationItem 单击事件基于所选项目创建一个新视图模型,并将其添加到可观察集合 MainPageViewModel.EditViewModels 并将 SelectedViewModel 设置为新创建的集合。
应用程序在 WPF 中但在 UWP 中缺失的隐式 DataTemplate 周围正常工作。我遇到的唯一问题是,当我从包含 Pivot 控件的页面导航并返回时,所有 Pivot 项都被清除且不显示。
我在页面构造函数中设置了this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Required,并没有覆盖NavigateTo方法。
如果我直接在数据透视项中设置我的用户控件而不使用DataTemplate 选择器,那么当我返回页面时会保留数据透视项。仅当我使用 ItemTemplateSelector 时才会清除数据透视项目。
任何帮助将不胜感激。我花了四天多的时间来解决问题。
提前致谢
【问题讨论】:
-
我创建了一个 ItemTemplateSelector,当我单击 navigationViewItem 时,我根据所选项目创建了一个新的视图模型,将其添加到 EditViewModels 并将 SelectedViewModel 设置为新的视图模型。我还将 NavigationCacheMode 设置为必需。之后,当我回到包含 Pivot 的页面时,内容显示良好并且没有被清除。我无法重现此问题。那么能否提供一个简单的样本,可以复制给我们测试?
-
你在页面构造器中开启缓存模式了吗??
this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled -
Ketan:是的,我在构造函数中有 this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Required
-
这里是示例代码的链接:link。每次单击列表视图都会打开一个数据透视项目。稍后,当您单击导航按钮(左上角)然后单击后退箭头时,将清除枢轴项
-
Neil:我不知道这是否有帮助,但我使用的是 1903 年构建的 Windows 10 和 Visual Studio 版本 16.4.3