如何将列表视图保存在文件中并稍后加载? UWP C#

How to save a List View in a file and load it later? UWP C#

我在 UWP 应用程序中有一个 ListView,其中有许多 ListView 作为其 ListViewItems。主 ListView 内的 ListView 是自定义 ListViewItems 的列表(带有一个以元素作为内容的网格)。

用户始终可以添加或删除主 ListView 的 ListView 中的自定义 ListViewItems 或主 ListView 中的整个 ListView。

我想保存用户在应用程序设置或文件中所做的所有更改(保存创建的 ListView 和自定义 ListViewItems 并在启动时加载它们)

有办法吗?

我试过的:

请提供显示如何保存和加载 ListView 的代码

应用程序结构如下所示:

Main ListView(应保存)> Main ListView 项 (ListViews)(可以 added/removed 由用户)> 自定义 ListViewItems(不仅是字符串)(可以 added/removed 由用户)

根据您的要求,您需要设计带有数据源的嵌套列表视图并将数据源存储到文件中。正如 Klaus Gütter 所说,ListViewItems 不支持序列化。

例如

Xaml代码

<Grid>
    <ListView ItemsSource="{x:Bind Items}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ListView ItemsSource="{Binding}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Content}" />
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <Button Content="SaveList" Click="Button_Click"/>
</Grid>

代码隐藏

public sealed partial class MainPage : Page
{
    public ObservableCollection<ObservableCollection<ListContent>> Items { set; get; }
    public MainPage()
    {
        this.InitializeComponent();
     
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);
        var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
        Object value = localSettings.Values["exampleSetting"];

        if (value == null)
        {
            var list1 = new ObservableCollection<ListContent>() { new ListContent { Content = "1" }, new ListContent { Content = "2" }, new ListContent { Content = "3" } };
            var list2 = new ObservableCollection<ListContent>() { new ListContent { Content = "A" }, new ListContent { Content = "B" }, new ListContent { Content = "C" } };
            var list3 = new ObservableCollection<ListContent>() { new ListContent { Content = "一" }, new ListContent { Content = "二" }, new ListContent { Content = "三" } };
            Items = new ObservableCollection<ObservableCollection<ListContent>>() { list1, list2, list3 };
        }
        else
        {
            Items = JsonConvert.DeserializeObject<ObservableCollection<ObservableCollection<ListContent>>>(value.ToString());
        }
    }
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        string json = JsonConvert.SerializeObject(Items);
        var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;

        // Create a simple setting.
        localSettings.Values["exampleSetting"] = json;

        // Read data from a simple setting.
      
    }
}
public class ListContent
{
    public string Content { get; set; }
}