添加到Windows Phone的收藏夹

时间:2016-10-28 14:10:34

标签: c# visual-studio-2015 windows-phone-8.1 windows-phone-silverlight

我的应用中有一个文本块,根据用户的偏好显示不同的文字。

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

正文块:

<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" />

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

1 个答案:

答案 0 :(得分:2)

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

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

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

简单示例

在第一页上,您可以拥有TextBoxButton。当用户在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来检索收藏夹,然后将它们存储在ObservableCollection<string>中,并使用数据绑定将它们绑定到列表控件:-)。