Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229

Как правильно реализовать сохранение и восстановление настроек в MVVM?

16.12.2021, 14:29. Показов 3597. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Тема создана разделением родительской: MVVM бизнес логика и Model

Элд Хасп,
Я в данный момент пишу свое приложение с применением знаний полученных из этой темы и у меня возник вопрос как правильно реализовать сохранение и загрузку настроек приложения.
Я вижу это так:
Вот есть у меня несколько моделей состояние которых нужно сохранять, сохранение происходить при клике по кнопке на View, чтобы их сохранить наверное лучше будет использовать JSON. Для JSON желательно иметь класс который будет хранить в себе настройки приложения и заниматься сериализацией и десериализацией. Тоесть нужно перед сохранением настроек сгрузить текущее состояние моделей в один класс и вызвать метод который сохранит все это. Чтобы загрузить настройки приложения нужно прочитать JSON файл и десериализовать его. Потом при создании моделей взять данные из модели настроек приложения.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.12.2021, 14:29
Ответы с готовыми решениями:

Сохранение и восстановление настроек браузеров
Как известно, средствами самих браузеров можно сохранить и восстановить лишь закладки и куки. Однако существуют специальные утилиты,...

MVVM приложение. Как правильно реализовать - обработка исключений, DependencyObject, или ещё как-то?
Всем привет, пишу WPF MVVM приложение. Возникла следующая проблема. Короче заполняется паспорт, где вводятся значения в TextBoxы,...

Сохранение/Восстановление настроек для разных пользователей(Управляемые)
Добрый день, уже который день с этим сижу, делал кто-нибудь, есть какой пример именно для управляемых? Вот сейчас пробую переделать...

26
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
17.03.2022, 19:20
Студворк — интернет-сервис помощи студентам
xr_Sanya, норм.
0
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
19.03.2022, 02:10  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
норм.
А может репозиторий содержать логику кроме работы с коллекциями?
Например как тут в методе TryAdd.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
    internal class ApplicationRepository
    {
        private readonly Dictionary<string, Application> _applications = new();
 
        [JsonProperty]
        private readonly List<string> _ignoredAppPaths = new();
 
        public bool TryAdd(string key, Application value)
        {
            var containsInIgnored = _ignoredAppPaths.Contains(value.ExecutableFilePath);
 
            if (value.IsIgnored)
            {
                if (!containsInIgnored)
                {
                    _ignoredAppPaths.Add(value.ExecutableFilePath);
                }
            }
            else
            {
                if (containsInIgnored)
                {
                    _ignoredAppPaths.Remove(value.ExecutableFilePath);
                }
            }
            return _applications.TryAdd(value.Name, value);
        }
 
        public bool TryGetValue(string key, [MaybeNullWhen(false)] out Application value)
            => _applications.TryGetValue(key, out value);
 
        public bool TryUpdate(string key, Application value)
        {
            if (_applications.ContainsKey(key))
            {
                _applications[key] = value;
                return true;
            }
            return false;
        }
 
        public void Delete(string key)
            => _applications.Remove(key);
 
        public void Clear()
            => _applications.Clear();
 
        public IReadOnlyDictionary<string, IApplication> GetData()
            => _applications.ToDictionary(key => key.Key, value => (IApplication)value.Value);
    }
Суть в чем, нужно хранить список игнорируемых приложений, для этого сделал репозиторий с двумя коллекциями, _applications хранит бизнес сущности, а _ignoredAppPaths хранит в себе пути до приложений.
При вызове метода TryAdd в _applications добавлется сущность и проверяется свойство IsIgnored, если оно положительное то тогда значение поле объекта ExecutableFilePath добавляется в _ignoredAppPaths. Также если IsIgnored = false и поле ExecutableFilePath есть в коллекции _ignoredAppPaths это поле оттуда удаляется.
Можно ли для этого использовать один и тотже репозиторий? Или этим должна заниматься непосредственно модель?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
19.03.2022, 09:40
Цитата Сообщение от xr_Sanya Посмотреть сообщение
Можно ли для этого использовать один и тотже репозиторий? Или этим должна заниматься непосредственно модель?
Репозиторий - это тоже часть Модели (В широком смысле этого термина).
Всё что касается работы с Хранилищем (более обще - источниками Данных) должно находится в Репозитории.
Из Репозитория (дружественный в вашем случае) выходят уже Доменные (Бизнес) Сущности.
Нужно ли их создавать для игнорируемых приложений?
Насколько я понял нет.
Значит из Репозитория Доменные Сущности для таких приложений не могут выходить.
0
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
20.03.2022, 02:20  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Нужно ли их создавать для игнорируемых приложений?
Насколько я понял нет.
Игнорируемые приложения это просто список, но добавление в него строк требует некоторой логики. К чему его тогда можно отнести? Вроде не модель, к репозиторию тоже не подходит. В данный момент он хранится просто в классе настроек и логику добавления данных для него обрабатывает ViewModel. мне кается что если оставлять этот список в моделе настроек то логику надо туда перенести. Например создать метод AddToIgnored с валидацией данных.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        private void SaveSettingsExecute()
        {
            foreach (var appVm in Applications)
            {
                var exePath = appVm.App.ExecutableFilePath;
                if (exePath != null)
                {
                    if (appVm.App.IsIgnored)
                    {
                        if (!_settings.IgnoredApplications.Contains(exePath))
                        {
                            _settings.IgnoredApplications.Add(exePath);
                        }
                    }
                    else
                    {
                        if (_settings.IgnoredApplications.Contains(exePath))
                        {
                            _settings.IgnoredApplications.Remove(exePath);
                        }
                    }
                }
            }
            _settings.SaveAsync();
        }
Чтоб было понятней при загрузке приложения формируется список запущенных приложений в системе и если такое приложение есть в игнорируемых, то ему устанавливается свойство isIgnored на true.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
20.03.2022, 12:19
Цитата Сообщение от xr_Sanya Посмотреть сообщение
Игнорируемые приложения это просто список, но добавление в него строк требует некоторой логики.
Если это редактируемый список, то он должен быть в Модели (со всеми методами его получения и редактирования).
Это список Модель может передать в Репозиторий, как постоянный, настраиваемый параметр фильтра для всех запросов.
Или при каждом запросе передавать его в метод Репозитория.

Добавлено через 1 минуту
Цитата Сообщение от xr_Sanya Посмотреть сообщение
Чтоб было понятней при загрузке приложения формируется список запущенных приложений в системе и если такое приложение есть в игнорируемых, то ему устанавливается свойство isIgnored на true.
Так Бизнес Сущность формируется для игнорируемых приложений или нет?
0
3 / 3 / 0
Регистрация: 13.07.2020
Сообщений: 229
20.03.2022, 12:54  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Это список Модель может передать в Репозиторий, как постоянный, настраиваемый параметр фильтра для всех запросов.
Или при каждом запросе передавать его в метод Репозитория.
Вы про модель настроек приложения или про модель приложений?

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Так Бизнес Сущность формируется для игнорируемых приложений или нет
Формируется, просто оно помечено как игнорируемое
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
20.03.2022, 14:38
Цитата Сообщение от xr_Sanya Посмотреть сообщение
Вы про модель настроек приложения или про модель приложений?
Возможно даже в обоих, так как его формирование происходит из настроек, а запрос на бизнес сущности формирует Модель Приложений.

Цитата Сообщение от xr_Sanya Посмотреть сообщение
Формируется, просто оно помечено как игнорируемое
Тогда из Репозитория должен приходить полный список, а Модель уже сама их пометит их как игнорируемые.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.03.2022, 14:38

УНФ для Украины 1.6. Сохранение\Восстановление настроек отбора списка документов
1С:Підприємство 8.3 (8.3.6.2449) УНФ для Украины, редакция 1.6 (1.6.2.1) Управляемые формы. Добрый день. Есть задача -...

Как сделать сохранение данных настроек?
мне нужно сохранение данных в настройках volume,music,windows mode.Чтоб пользователю не приходилось всё настраивать обратно вот значит мой...

Как правильно получать данные в MVVM?
Каким образом правильно будет загружать данные из открываемого файла? 1. Вызывать командой через VM метод в модели, который сам...

Как правильно прикрутить enum к Combobox в MVVM
Здравствуйте. Озадачен вопросом как правильно прикрутить Enum к Combobox в MVVM? И как получить выбранное значение? В осваивании mvvm в...

Как реализовать добавление настроек?
Как бы вы реализовали добавление и удаление настроек подобного вида? На ум приходит только удаление и добавление кода непосредственно во...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru