Необходимо убедиться, что значение userLabel
совпадает при сохранении значения и при попытке его получения.Обычно для этого рекомендуется использовать поле const string
.Более того, рефакторинг всего кода, который обращается к настройкам в отдельный класс.Вы можете создавать свойства для отдельных настроек и использовать их имя в качестве ключа к настройке:
public class AppSettings
{
public string UserName
{
get => ReadSetting(null);
set => SaveSetting(value);
}
private string ReadSetting(string defaultValue,
[CallerMemberName]string settingKey = null)
{
var localSettings = ApplicationData.Current.LocalSettings;
if (localSettings.Values.ContainsKey(settingKey))
{
return (string)settings.Values[settingKey];
}
else
{
return defaultValue;
}
}
private string SaveSetting(string value,
[CallerMemberName]string settingKey = null)
{
ApplicationData.Current.LocalSettings.Values[settingKey] = value;
}
}
Теперь вы просто будете использовать AppSettings
в своем коде:
public void SaveSetting(string userLabel, string userNamelabel)
{
var appSettings = new AppSettings();
appSettings.UserName = textBoxUsername.Text;
}
private string ReadSetting(string userLabel)
{
var appSettings = new AppSettings();
return appSettings.UserName ?? "User not signed in";
}
Для дальнейшегообъяснить код - [CallerMemberName]
- это специальный атрибут, который заполняется во время компиляции и будет содержать имя вызывающего метода, в этом случае это будет имя свойства.
Кроме того, AppSettings
теперь является простым сервисом, который можно использовать как одноэлементный, и вы можете извлечь из него интерфейс и внедрить его везде, где вам нужно его использовать, используя контейнер IoC.