2015-09-07 87 views
0

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

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再次登录,他的工作人员显示正常。但是,当我重新启动应用程序时,我会失去一切。 我不知道我做错了什么。我忘记了一些重要的事情吗?

+0

噢,我知道在我写'''Type =“System.Collections.Generic.List <HRManager.Model.User>”Scope =“用户“>”,但没关系 – bakala12

回答

0

我发现设置没有保存并正确恢复的原因,所以我张贴了答案。要理解为什么会发生这种情况,为什么必须知道Visual Studio settings是如何工作的。据了解,这是一个相当常见的XML serialization,所以它有一些要求。

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