Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据保存在多个ViewModels中使用的文件中_C#_Wpf_Mvvm_Constructor_Prism - Fatal编程技术网

C# 将数据保存在多个ViewModels中使用的文件中

C# 将数据保存在多个ViewModels中使用的文件中,c#,wpf,mvvm,constructor,prism,C#,Wpf,Mvvm,Constructor,Prism,所以我不确定我这样问是否正确,但我一直在自学WPF,我无法找到一种方法来保存用户在我的应用程序中输入的数据 public class Vault : BindableBase { public Vault(string savedFilePath = null) { if (string.IsNullOrEmpty(savedFilePath)) { Measures = new List<int> { 1,

所以我不确定我这样问是否正确,但我一直在自学WPF,我无法找到一种方法来保存用户在我的应用程序中输入的数据

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; }
}
假设一个项目需要用户输入一组值。所以我有一个类存储这些信息。如果用户已经输入并保存在应用程序中,则可以从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; }
}
这样,当我按Save时,
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
中的值。理想情况下,这将使单元测试变得简单(我还没有开始)


如果有人能给我一个线索,找到更好的方法来处理这种情况,我会非常感激

这可能会被标记为范围太广,但一般来说,您应该将数据序列化到数据库中。本文是一个很好的起点:

如果您的数据结构非常精简,那么您可能希望使用类似SQLite的东西,它将数据库存储在本地文件中,并且不需要在应用程序中安装任何第三方应用程序。这里有大量关于如何使用实体框架的信息:


我建议EF Core开发一款新的应用程序。。。但肯定是要走的路(除非数据真的微不足道)。此外,还可以添加EF应该隐藏在服务中,而不是在每个视图模型中直接访问。