繁体   English   中英

StreamWriter MVVM C#是否写入变量地址?

[英]StreamWriter MVVM C# writes variable address?

我正在研究C#,并想创建一个简单的注册和登录表单以进行练习。 我正在尝试使用MVVM模式。 似乎将登录数据存储到文本文件中,然后从中读取以进行身份​​验证似乎更容易。 但是发生了一个问题StreamWriter这样写:System.Collections.ObjectModel.ObservableCollection`1 [LoginForm.Andmed.LoginData]

如果有人能说出什么问题或如何解决,我将非常感激。

视图模型:

 class LoginVM
{
    public string path = @"C:\Users\Dell\Desktop\data.txt";
    private ObservableCollection<LoginData> andmed; // creating ObservableCollection of LoginData data.

    public ObservableCollection<LoginData> Andmed
    {
        get { return andmed; }
        set { andmed = value; }
    }
    public LoginVM()
    {
        this.andmed = new ObservableCollection<LoginData>();

    }

    public void lisaAndmed(string user, string pass)//adds data to ObservableCollection
    {

        this.andmed.Add(new LoginData(user, pass));

    }
    public void salvestaAndmed()//
    {


        StreamWriter SW = new StreamWriter(path, true); // using streamwriter to save data from the Collection to the path defined
        SW.WriteLine(this.andmed);
        SW.Close();


    }
    public string autendi() // method for later purpose for authentification in login form.
    {
        StreamReader SR = new StreamReader(path);

        path = SR.ReadToEnd();

        SR.Close();
        return path;
    }

性质:

namespace LoginForm.Andmed
{
public class LoginData
{

    private string username;
    private string password;


    public string Username
    {
        get { return username; }
        set { username = value; }
    }

    public string Password
    {
        get { return password; }
        set { password = value; }
    }

    public LoginData(string _username, string _password)
    {

        this.password = _password;
        this.username = _username;


    }
}

}

模型视图类:

public partial class MainWindow : Window
{
    LoginVM mudel;
    public MainWindow()
    {
        InitializeComponent();
        mudel = new LoginVM();

        this.DataContext = mudel;
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {

        if (user.Text.Length > 0 && pass1.Password == pass2.Password)
        {

           success.Text = "Successfuly registered!" + user.Text;
           error.Text = "";
           mudel.lisaAndmed(user.Text, pass1.Password); // calling the method to add data into obsercablecooll
           mudel.salvestaAndmed(); // now trying to save the data from obsservablecall
        }
        else if (pass1.Password != pass2.Password)
        {
            error.Text = "Passwords arent the same";

        }
        else
        {

            error.Text = "Username incorrect!";

        }
        Logimine logimine = new Logimine();
        logimine.ShowDialog();

    }
}

这个:

SW.WriteLine(this.andmed);

写入ObservableCollection<T>.ToString()方法调用的结果,默认情况下为类型名称,因为ObservableCollection<T>不会覆盖Object.ToString()

您必须使用任何序列化程序来保存和加载ObservableCollection<LoginData>内容。 例如,它可以是XmlSerializer

        var serializer = new XmlSerializer(typeof(ObservableCollection<LoginData>));
        var collection = new ObservableCollection<LoginData>
        {
            new LoginData { Username = "admin", Password = "123" },
            new LoginData { Username = "johndoe", Password = "456" }
        };

        var sb = new StringBuilder();

        // serialize
        using (var writer = new StringWriter(sb))
        {
            serializer.Serialize(writer, collection);
        }

        // deserialize
        using (var reader = new StringReader(sb.ToString()))
        {
            var collectionClone = serializer.Deserialize(reader);
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM