Добавить текстовый блок в список избранного при нажатии кнопки

У меня две страницы: первая mainpage.xaml, а вторая favoriteslist.xaml.

В mainpage.xaml у меня есть текстовый блок, который автоматически показывает динамический текст.

А у меня кнопка тоже на mainpage.xaml.

Из чего я хочу, когда я нажимаю на эту кнопку, текст, появляющийся в текстовом блоке, должен перейти в список избранного на странице favoriteslist.xaml.

Если текст уже добавлен в избранное, текст, который появляется в текстовом блоке, должен быть удален из списка избранного при нажатии кнопки.

Итак, наконец, мне нужна помощь в реализации этого функционального текстового блока, который динамически показывает уже созданный, но мне нужно только знать, как разработать функциональность add to favorite.

Текстовый блок:

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

person Shubham Sahu    schedule 08.11.2016    source источник
comment
пожалуйста, предоставьте любой образец, чтобы сделать это, если это возможно   -  person Shubham Sahu    schedule 08.11.2016


Ответы (1)


Я бы использовал IsolatedStorageSettings для хранения списка и сравнения динамического текста со списком в настройках изолированного хранилища при нажатии кнопки. Затем на странице «FavouritesList» установите источник элемента списка в список в IsolatedStorageSettings. Итак, вот шаги, которые необходимо выполнить: 1. Создайте модель/класс для установки динамического текста, отображаемого в текстовом блоке.

public class favourites
{
    public string myText { get; set; }
}

2. В событии нажатия кнопки на MainPage.xaml.cs сначала установите динамический текст (откуда вы его получаете) в текстовый блок, если вам нужно, а затем создайте список и/или сравните

 private void AddToFavoritesButton_Click(object sender, RoutedEventArgs e)
    {
        //your dynamic text set to textblock
        StringTextBlock.Text = myDynamicText;  

        //Set value of your text to member variable of the model/class
        favourites f = new favourites();
        f.myText = myDynamicText;

        IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;

        /*Check if "FavouritesList" key is present in IsolatedStorageSettings
          which means already a list had been added. If yes, retrieve the
          list, compare each item with your dynamic text, add or remove
          accordingly and replace the new list in IsolatedStorageSettings
          with same key. */

        if (settings.Contains("FavouritesList"))
        {
            List<favourites> l = (List<favourites>)settings["FavouritesList"];
            for(int i = 0; i <= l.Count()-1; i++)
            {
                if (l[i].Equals(myDynamicText))
                {
                    l.RemoveAt(i);
                    settings["FavouritesList"] = l;
                }
                else
                {
                    l.Add(f);
                    settings["FavouritesList"] = l;
                }
            }           
        }

        //If no key in IsolatedStorageSettings means no data has been added
        //in list and IsolatedStorageSettings. So add new data

        else
        {
            List<favourites> l = new List<favourites>();
            l.Add(f);
            settings["FavouritesList"] = l;
        }
        settings.Save();
    }       

Теперь все, что осталось, это показать всегда обновляемый список на странице FavouritesList. Я добавил текстовый блок «NoData», который должен быть виден, когда в списке ничего нет. В противном случае будет отображаться список. В ИзбранномList.xaml

 <ListBox x:Name="FavoriteListBox" Visibility="Collapsed">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding myText}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

        <TextBlock Name="NoData" 
                   Text="No Data" 
                   Visibility="Collapsed" 
                   Width="50" 
                   Height="50"/>

В ИзбранномList.xaml.cs

 IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
        if (settings.Contains("FavouritesList"))
        {
           List<favourites> l = (List<favourites>)settings["FavouritesList"];
            if(l.Count!= 0)
            {
                NoData.Visibility = System.Windows.Visibility.Collapsed;
                FavoriteListBox.Visibility = System.Windows.Visibility.Visible;
                FavoriteListBox.ItemsSource = l;
            }                  
        }

        else
        {
            FavoriteListBox.Visibility = System.Windows.Visibility.Collapsed;                   
            NoData.Visibility = System.Windows.Visibility.Visible;
        }

Я не проверял это, но определенно должно работать. Надеюсь, поможет!

person user5434084    schedule 09.11.2016
comment
хорошо, позвольте мне проверить, если работа определенно проголосует за ваш ответ. Благодарность - person Shubham Sahu; 13.11.2016
comment
все работает правильно, но когда я добавляю в избранное 1-й текст, он попадает в список избранных в Favoriteslist.xaml, но когда я пытаюсь добавить в избранное следующее текстовое приложение, оно останавливается или зависает - person Shubham Sahu; 13.11.2016
comment
Вы пробовали отлаживать приложение? Где возникает проблема - person user5434084; 13.11.2016
comment
Отладка продолжается без каких-либо исключений или ошибок, но приложение зависает или завершается, когда я добавляю еще одно избранное - person Shubham Sahu; 13.11.2016
comment
Вы хотя бы пытались искать об исключении? Потому что я нашел довольно много на нем с помощью простого поиска. Я предоставил весь код. Ошибка связана не с кодом, а с данными, которые вы храните, которые довольно велики. Так что, пожалуйста, проголосуйте за мой ответ. А вот ссылка на вашу проблему. Пожалуйста, попробуйте решения и немного поработайте над этим - person user5434084; 14.11.2016
comment
Хорошо, я проверю, но у вас есть идеи, почему эта ошибка (как показано на изображении) 1-е избранное можно легко добавить, но при попытке добавить другое избранное возникает это исключение. например, в текстовом блоке отображается 123abc, затем я нажимаю на избранное, текст переходит в изолированное хранилище и доступен в файле FavoriteList.xaml, но во втором приложении через исключение. - person Shubham Sahu; 15.11.2016