Так что я не уверен, правильно ли мне задавать этот вопрос, но я сам изучал WPF и не могу найти метод для сохранения данных, которые пользователь вводит в мое приложение.
Допустим, проект требует от пользователя ввода IList<int>
значений.Итак, у меня есть класс, хранящий эту информацию.Эта информация может быть загружена из файла json, если пользователь уже ввел ее и сохранил в приложении.
public class Vault : BindableBase
{
public Vault(string savedFilePath = null)
{
if (string.IsNullOrEmpty(savedFilePath))
{
Measures = new List<int> { 1, 2, 3, 4 };
}
else
{
Measures = (List<int>)JsonConverter.DeserializeObject<List<int>>(savedFilePath);
}
}
public IList<int> Measures { get; set; }
}
Теперь, когда я создаю представление приложения, я хочу загрузить все ViewModels
, которые будет использовать пользователь.В каждом ViewModel
должен присутствовать элемент списка Measures
.
public MainWindowViewModel()
{
vault = new Vault(savedFilePath);
Collection = new ObservableCollection<object>
{
new FirstViewViewModel(vault.Measures[0]),
new SecondViewViewModel(vault.Measures[1])
};
}
, чтобы при нажатии Сохранить класс Vault
можно было сериализовать.
public void Save()
{
File.WriteAllText(fileLocation, JsonConvert.SerializeObject(vault));
}
Поскольку я хочу изменить значения в Vault
с помощью ввода пользователя, мне нужна прямая ссылка на него, поэтому в ViewModels
я делаю
public class FirstViewViewModel : BindableBase
{
private int _measure;
public FirstViewViewModel(int measure)
{
_measure = measure;
}
public int Measure
{
get => _measure;
set => SetProperty(ref _measure, value);
}
}
Тем не менее это кажется ужасным способом связать пользовательский ввод с данными, которые я хочу сохранить в файле.
Это упрощенный случай того, чего я хочу достичь.Однако я уверен, что есть лучший способ, который позволил бы мне изменять значения в Vault
при поднятии свойства на ViewModel
.В идеале такой, который облегчит UnitTest (я еще не начал с этого).
Если бы кто-нибудь мог предложить мне подсказку, чтобы найти лучший способ справиться с такой ситуацией, я был бы очень признателен.