2014-01-27 3 views
0

im изучая C# и хотел создать простую регистрацию и форму входа в систему, чтобы практиковать. Я пытаюсь использовать шаблон MVVM. Казалось, что проще просто хранить данные входа в текстовый файл, а затем читать из него для аутентификации. Но возникла проблема, с которой StreamWriter пишет так: System.Collections.ObjectModel.ObservableCollection`1 [LoginForm.Andmed.LoginData]StreamWriter MVVM C# записывает адрес переменной?

Если кто-нибудь может сказать, какие проблемы и как исправить, я был бы очень благодарен.

вид модели:

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(); 

    } 
} 
+0

Какие исключения вы получаете? – Joe

+0

нет ожиданий вообще, только информация, записанная в текстовый файл, находится в формате> System.Collections.ObjectModel.ObservableCollection'1 [LoginForm.Andmed.LoginData] – user3024888

ответ

1

Это:

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); 
     } 
+0

Но если я хочу добавить данные в «var collection = new ObservableCollection «из текстовых полей, то я должен создать этот метод в классе MainWindows? – user3024888

+0

@ user3024888: у вас уже есть этот метод - 'salvestaAndmed'. Вам нужно это исправить. – Dennis

Смежные вопросы