Visual Studio 设置不起作用
Visual Studio settings doesn't work
我有一个简单的 WPF
应用程序,允许用户管理他们的员工。用户可以添加、删除和编辑工人。我想在重新启动应用程序后记住用户和他们的工作人员,所以我想我需要使用 Visual Studio
设置(我的意思是 Settings.settings
文件和 Settings
class)。
我的应用程序显示登录名 window,用户写入登录名和密码,主 window 显示允许查看和控制用户的工作人员。
当用户登录时,我想加载他的工作人员列表,在他注销后,我想保存修改后的列表。
我创建了一个名为 AllUsers
的设置,类型为 UserCollection
。这是这个简单的 class 和 User
class:
的代码
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>();
}
}
然后我写了一个 class 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 身份登录时,他的工人可以正常显示。但是,当我重新启动应用程序时,我将丢失所有内容。
我不知道我做错了什么。我是不是忘记了什么重要的事情?
我找到了设置未正确保存和恢复的原因,所以我 post 回答了这个问题。要理解为什么会发生这种情况,为什么必须了解 Visual Studio settings
是如何工作的。众所周知,它很常见 XML serialization
所以它有一些要求。
只有非静态和非只读字段和属性被序列化,我们必须在 class 中有非参数化的默认构造函数以确保此 class 可以序列化为 XML
。所以,在这个问题中我们想要序列化 User
对象的集合,所以泛型类型(在本例中 User
)必须有一个非参数化的构造函数。这是不起作用的主要原因。
我有一个简单的 WPF
应用程序,允许用户管理他们的员工。用户可以添加、删除和编辑工人。我想在重新启动应用程序后记住用户和他们的工作人员,所以我想我需要使用 Visual Studio
设置(我的意思是 Settings.settings
文件和 Settings
class)。
我的应用程序显示登录名 window,用户写入登录名和密码,主 window 显示允许查看和控制用户的工作人员。
当用户登录时,我想加载他的工作人员列表,在他注销后,我想保存修改后的列表。
我创建了一个名为 AllUsers
的设置,类型为 UserCollection
。这是这个简单的 class 和 User
class:
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>();
}
}
然后我写了一个 class 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 身份登录时,他的工人可以正常显示。但是,当我重新启动应用程序时,我将丢失所有内容。 我不知道我做错了什么。我是不是忘记了什么重要的事情?
我找到了设置未正确保存和恢复的原因,所以我 post 回答了这个问题。要理解为什么会发生这种情况,为什么必须了解 Visual Studio settings
是如何工作的。众所周知,它很常见 XML serialization
所以它有一些要求。
只有非静态和非只读字段和属性被序列化,我们必须在 class 中有非参数化的默认构造函数以确保此 class 可以序列化为 XML
。所以,在这个问题中我们想要序列化 User
对象的集合,所以泛型类型(在本例中 User
)必须有一个非参数化的构造函数。这是不起作用的主要原因。