1

我的应用程序中有一个文本块,它将根据用户的喜好显示不同的文本。

我希望用户能够保存他们最喜欢的文本,单击按钮后将保存该文本。稍后,保存的收藏文本列表将作为选择选项显示。有没有人知道如何创建这个过程?请提供代码示例。

文本块:

<TextBlock x:Name="StringTextBlock" Text="" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}" />

按钮:

<Button Grid.Row="2" x:Name="AddToFavoritesButton" 
        Content="Add" Style="{StaticResource ButtonStyle2}" Margin="2"
        Click="AddToFavoritesButton_Click"/>

C#

private void AddToFavoritesButton_Click(object sender, RoutedEventArgs e)
{
}

和另一个页面上的列表框,稍后单击收藏夹按钮即可访问

<ListBox x:Name="FavoriteListBox" />

我想知道如何将文本块中的当前文本添加到收藏文本列表中。或者,另一种方法是添加到收藏文本列表。

4

1 回答 1

2

这在很大程度上取决于您是想为应用程序的运行会话还是多次启动存储“收藏夹”。

如果您只是想暂时存储它们,您可以创建一个List<string>为收藏夹保存 a 的类,然后在“其他页面”上将它们加载到 a 中ObservableCollection<string>并使用数据绑定来显示它们。此处介绍了数据绑定 - https://msdn.microsoft.com/en-us/windows/uwp/data-binding/data-binding-quickstart

要保留收藏夹,您需要将它们保存在某个地方,最好是在一个文件中。最简单的方法是在其中创建一个文件ApplicationData.Current.LocalFolder并将数据序列化为其内容,然后在下一次应用启动时重新加载它们。JSON.NET是一个很好的处理 JSON 文件的序列化库。将数据序列化为 JSON 字符串并返回非常容易。然后,您可以使用FileIO.WriteTextAsync()FileIO.ReadTextAsync()方法在文件中写入和读取数据。

简单的例子

在第一页上,您可以有 aTextBox和 a Button。当用户在 中键入内容TextBox并单击 时Button,您可以执行以下操作:

FavoritesManager.AddAsync( inputBox.Text );

该类FavoritesManager可能大致如下所示:

public static class FavoritesManager
{
    List<string> _favorites = null;

    public static async Task LoadFromStorageAsync()
    {
        _favorites = 
            JsonConvert.DeserializeObject<List<string>>( 
                await FileIO.ReadAllTextAsync( "somefile.txt" ) );
    }

    public static async Task AddAsync( string text )
    {
        _favorites.Add( text );
        await FileIO.WriteAllTextAsync( "somefile.txt",
           JsonConvert.SerializeObject( _favorites ) );                    
    }

    public static IEnumerable<string> GetFavorites()
    {
       return _favorites;
    }
}

您必须LoadFromStorageAsync在尝试获取收藏夹之前调用该方法,以便它们在_favorites列表中准备就绪。

在第二页上,您只需调用GetFavorites以检索收藏夹,然后将它们存储在 a 中ObservableCollection<string>并使用数据绑定将它们绑定到列表控件:-)。

于 2016-10-28T14:22:48.267 回答