2015-09-07 88 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)必須具有非參數化構造函數。這就是爲什麼這不起作用的主要原因。