изолированное хранилище Silverlight - не сохраняется при перезапуске приложения - PullRequest
2 голосов
/ 12 августа 2010

по какой-то причине каждый раз, когда я перезапускаю (в браузере) приложение silverlight, в изолированном хранилище нет ключей.

Я даже пробовал это с ванильным шаблоном с кодом ниже.вещи, которые я проверял:

  1. всегда используя один и тот же порт

  2. при запуске приложение всегда создавало запись в изолированном хранилище (никогда не сохранялось)

  3. при выключении, ключи всегда присутствуют в изолированном хранилище

Код: -

 namespace SilverlightApplication1  
 {

    public partial class MainPage : UserControl, INotifyPropertyChanged
    {

        private string _ChildCount;
        public string ChildCount
        {
            get { return _ChildCount; }
            set { NotifyPropertyChangedHelper.SetProperty(this, ref _ChildCount, value, "ChildCount", PropertyChanged); }
        }


        public MainPage()
        {
            InitializeComponent();
            SaveData();

        }

        ~MainPage()
        {
            CheckData();
        }

        private void SaveData()
        {
            if (!IsolatedStorageSettings.ApplicationSettings.Contains("childCheck"))
            {
                IsolatedStorageSettings.ApplicationSettings.Add("childCheck", Parent.Create(5, 5));
                ChildCount = "Created Children(5)";
            }
            else
                CheckData();
        }

        private void CheckData()
        {
            if (IsolatedStorageSettings.ApplicationSettings.Contains("childCheck"))
            {
                if (((Parent)IsolatedStorageSettings.ApplicationSettings["childCheck"]).Children.Length == 5)
                    ChildCount = "Children Present";
                else
                    ChildCount = "Parent present without children";
            }
            else
                ChildCount = "Children not found";
        }



        public class Parent
        {
            public int Id { get; private set; }
            public Child[] Children { get; private set; }
            private Parent() { }

            public static Parent Create(int id, int childCount)
            {
                var result = new Parent
                {
                    Id = id,
                    Children = new Child[childCount]
                };

                for (int i = 0; i < result.Children.Length; i++)
                    result.Children[i] = Child.Create(i);

                return result;
            }

        }

        public class Child
        {
            public int Id { get; private set; }
            private Child() { }

            public static Child Create(int id)
            {
                return new Child { Id = id };
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }
}

любая помощь будетприветствуется.

1 Ответ

2 голосов
/ 12 августа 2010

Чтобы сериализовать объект в настройках приложения, каждый задействованный тип (в вашем случае Parent и Child) должен иметь открытый конструктор по умолчанию, а свойства, для которых требуется сериализация, должны иметь публичные процедуры получения и установки.

Вы можете получить немного больше контроля, используя некоторые атрибуты в пространстве имен System.Runtime.Serialization, такие как DataMember.

Кроме того, вы еще не вызвали IsolatedStorageSettings.ApplicationSettings.Save, поэтому ничто не закончитсяв любом случае в магазине.

...