Visual Studio设置不起作用

本文关键字:不起作用 设置 Studio Visual | 更新日期: 2023-09-27 18:11:26

我有一个简单的WPF应用程序,允许用户管理他们的工人。用户可以添加、删除和编辑工作者。我想在重新启动应用程序后记住用户和他们的工人,所以我认为我需要使用Visual Studio设置(我的意思是Settings.settings文件和Settings类)。我的应用程序显示登录窗口,用户写入登录名和密码,主窗口显示允许查看和维护用户的工人。当用户登录时,我想加载他的工人列表,他登出后,我想保存修改的列表。我创建了一个类型为UserCollection的名为AllUsers的设置。下面是这个简单类和User类的代码:

public class UserCollection
{
    public UserCollection(IEnumerable<User> users = null)
    {
        Users=new List<User>(users ?? new List<User>());
    }
    public List<User> Users;
}
public class User
{
    public string Login { get; }
    public string Password { get; }
    public ObservableCollection<Worker> Workers { get; set; } 
    public User(string login, string password)
    {
        Login = login;
        Password = password;
        Workers=new ObservableCollection<Worker>();
    }
}

然后我写了一个类PropertiesManager来管理设置,更新和保存它们。下面是代码:

public static class PropertiesManager
{
    public static List<User> Users
    {
        get
        {
            if (Settings.Default.AllUsers == null)
            {
                Settings.Default.AllUsers=new UserCollection();
                Settings.Default.Save();
            }
            return Settings.Default.AllUsers.Users;
        }
        set
        {
            Settings.Default.AllUsers.Users = value;
            Settings.Default.Save();
        }
    } 
    public static User VerifyUser(string login, string password)
    {
        User current = Users.FirstOrDefault(x => x.Login.Equals(login));
        if (current == null)
        {
            current=new User(login,password);
            Users.Add(current);
            SaveUser();
        }
        return current;
    }
    public static void SaveUser()
    {
        Settings.Default.Save();
    }
}

我也认为Settings.settings文件可能有用:

<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01  /settings" CurrentProfile="(Default)" GeneratedClassNamespace="HRManger.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
    <Setting Name="AllUsers" Type="HRManger.UserCollection" Scope="User">
        <Value Profile="(Default)" />
    </Setting>
</Settings>
</SettingsFile>

我注意到,当我以user1的身份登录时,添加一些工人并注销,然后像user2一样做同样的事情,并再次以user1的身份登录,他的工人显示正确。但是,当我重新启动应用程序时,我将失去所有内容。我不知道我做错了什么。我忘了什么重要的事吗?

Visual Studio设置不起作用

我已经找到了设置没有正确保存和恢复的原因,所以我发布了这个答案。要理解为什么会发生这种情况,我们必须了解Visual Studio settings是如何工作的。众所周知,这是一个相当常见的XML serialization,所以它有一些要求。

只有非静态和非只读字段和属性被序列化,我们必须在类中有非参数化的默认构造函数,以确保该类可以被序列化为XML。所以,在这个问题中,我们想要序列化User对象的集合,所以泛型类型(在这个例子中是User)必须有一个非参数化的构造函数。这就是为什么它不起作用的主要原因。