Я уже некоторое время борется с тем, как лучше всего «взаимодействовать» с настройками на уровне привязки в приложении WinRT/UWP. Я искал лучшие практики в этом отношении, но я не нашел четких ответов. В моих приложениях я сделал следующее:Рекомендации по настройке привязки к приложениям
- Определить BindableBase, который реализует INotifyPropertyChanged.
Создание класса AppSettings, который наследуется от BindableBase и выглядит немного как это:
public class AppSettings : BindableBase { ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings; public string MySetting { get { if (!localSettings.Values.ContainsKey("MySetting")) localSettings.Values["MySetting"] = "Some default value"; return localSettings.Values["MySetting"].ToString(); } set { localSettings.Values["MySetting"] = value; RaisePropertyChanged(); } } }
Определить ViewModel, который имеет свойство AppSettings:
public class SettingsViewModel { public AppSettings Settings { get; set; } = new AppSettings(); }
Bind свойству Настройки в Вид:
<TextBlock Text="{Binding Settings.MySetting, Mode=TwoWay}">
Я видел и использовал реализации в прошлом, у которых была служба настроек, но эти приложения не нуждались в том, чтобы изменения настроек вступали в силу немедленно. Так что я в основном задаю вопрос: если изменения в настройках должны немедленно вступить в силу, является ли приведенная выше реализация хорошим способом привязки к настройкам? Если нет, что вы рекомендуете?
связанный: [Зверь с лучшей практикой] (http://meta.stackexchange.com/a/142354/1228) Кроме того, вы можете использовать пояснения, что вы подразумеваете * для вступления в силу *. Вы имеете в виду спасенный немедленно? Я знаю, что в WPF нет ничего, что существовало бы в рамках, которая делает это для вас. Кажется, у вас уже есть что-то, что должно работать (ish?). Если он не делает то, что вам нужно, измените код так, чтобы он это делал. – Will
Я думаю, что ваша реализация прекрасна и работает так, как вы хотите, чтобы это было для вашей ситуации. Если вам нужно, чтобы каждый параметр был применен немедленно (вместо нажатия кнопки сохранения), вам придется назначить новое значение в наборе свойств (как у вас есть). В это время будут активированы любые подписчики-слушатели изменений в наборе свойств. –
@ Будь я не так много ищут лучшей практики, но если что-то не так с моей реализацией, потому что я чувствую, что это не очень эффективная производительность. – Abdousamad