c# - UWP - 从 TabView 类中保存选项卡
问题描述
如何保存最终用户创建的数据(选项卡)以在 UWP 应用程序关闭时重新打开选项卡。
源代码 - NavigationView 事件处理程序
using Windows.UI.Xaml.Controls;
namespace Network
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void NavigationView_OnSelectionChanged(NavigationView sender,
NavigationViewSelectionChangedEventArgs args)
{
if (args.SelectedItemContainer.Tag.Equals("Users"))
{
Frame.Navigate(typeof(Interface));
}
if (args.SelectedItemContainer.Tag.Equals("Interception"))
{
Frame.Navigate(typeof(Network));
}
}
}
}
解决方案
如何保存最终用户创建的数据(选项卡)以在 UWP 应用程序关闭时重新打开选项卡。
当然,您可以将 Tabs 数据保存为 json 字符串,然后在应用关闭期间存储在本地文件夹中。当您重新打开应用程序时,您可以将 json 字符串反序列化为选项卡的数据。
例如
public MainPage()
{
this.InitializeComponent();
App.Current.Suspending += Current_Suspending;
}
private ObservableCollection<TabData> Tabs;
private void Current_Suspending(object sender, Windows.ApplicationModel.SuspendingEventArgs e)
{
if (Tabs.Count > 0)
{
var json = JsonConvert.SerializeObject(Tabs);
ApplicationData.Current.LocalSettings.Values["TabsData"] = json;
}
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
var json = ApplicationData.Current.LocalSettings.Values["TabsData"] as string;
if (json != null)
{
Tabs = JsonConvert.DeserializeObject<ObservableCollection<TabData>>(json);
}
else
{
Tabs = new ObservableCollection<TabData>();
Tabs.Add(new TabData( "page1", Type.GetType( "App19.TestPage")));
}
}
private void TabView_Loaded(object sender, RoutedEventArgs e)
{
(sender as TabView).TabItemsSource = Tabs;
}
private void TabView_AddButtonClick(TabView sender, object args)
{
Tabs.Add(new TabData("newPage", typeof(TestPage)));
}
private void TabView_TabCloseRequested(TabView sender, TabViewTabCloseRequestedEventArgs args)
{
Tabs.Remove(args.Item as TabData);
}
标签类
public class TabData
{
public TabData(string header, Type frameType)
{
Header = header;
FrameType = frameType;
}
public string Header { get; set; }
public Type FrameType { get; set; }
}
Xaml
<muxc:TabView
AddTabButtonClick="TabView_AddButtonClick"
Loaded="TabView_Loaded"
TabCloseRequested="TabView_TabCloseRequested">
<muxc:TabView.TabItemTemplate>
<DataTemplate>
<muxc:TabViewItem Header="{Binding Header}" >
<muxc:TabViewItem.IconSource>
<muxc:SymbolIconSource Symbol="Document"/>
</muxc:TabViewItem.IconSource>
<Frame SourcePageType="{Binding FrameType}" />
</muxc:TabViewItem>
</DataTemplate>
</muxc:TabView.TabItemTemplate>
</muxc:TabView>
推荐阅读
- ckeditor - 如何插入图像和超链接 [ckeditor 4]
- javascript - 加载没有图像的网站以提高效率
- node.js - 如何将排序功能与 $or 和 $and 一起使用?
- javascript - 当您在 JavaScript Promises 中省略 .catch 时,实际发生了什么?
- javascript - 无法解析为在 Thymeleaf 中定义 DataTable 的表达式
- java - kurento-room-demo 缺少库 org.kurento.module:markerdetector
- python - 列表/Zip 中的“for”
- python - 通过与训练数据的一致映射来分解实时数据?
- kotlin - Kotlin DSL Android Gradle 任务
- javascript - JS:在数组中查找不成对的元素