我有一个简单的WPF
应用程序,允许用户管理他们的工作人员。用户可以添加,删除和编辑工作人员。我想在重新启动应用程序后记住用户及其工作人员,因此我认为我需要使用Visual Studio
设置(我的意思是Settings.settings
文件和Settings
类)。
我的应用程序显示登录窗口,用户写入登录名和密码,主窗口显示允许查看和维护用户的工作人员。
当用户登录时我想加载他的工作人员列表,并在他注销后我想保存修改后的列表。
我创建了一个名为AllUsers
的{{1}}类型的设置。这是这个简单类的代码和UserCollection
类:
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
我注意到当我以user1登录时添加一些工作人员并注销,然后执行与user2相同的操作并再次以user1身份登录,他的工作人员正确显示。但是,当我重新启动应用程序时,我将失去一切。 我不知道我做错了什么。我忘记了重要的事情吗?
答案 0 :(得分:0)
我找到了设置未正确保存和恢复的原因,所以我发布了答案。要了解为什么会发生这种情况,为什么必须了解Visual Studio settings
的工作原理。众所周知,它是一个非常常见的XML serialization
因此它有一些要求。
只有非静态和非只读字段和属性被序列化,我们必须在类中使用非参数化的默认构造函数,以确保此类可以序列化为XML
。因此,在这个问题中,我们希望序列化User
个对象的集合,因此泛型类型(在本例中为User
)必须具有非参数化的构造函数。这就是为什么不起作用的主要原因。