2016-08-07 4 views
0

Ich habe einfache Galerie mit Notizen und Textfeld, um neue nach Titel hinzuzufügen. Ich benutze mvvm, andere Bindings funktionieren korrekt. Wenn ich Titel der Notiz festlegen und auf Eigenschaft hinzufügen klicken, wird NewNote.Title aktualisiert und das Objekt in der Datenbank gespeichert. Danach lösche ich NewNote.Title, aber die Benutzeroberfläche wird nicht aktualisiert.Wpf binded Eigenschaft nicht im 2-Wege-Modus aktualisieren

hier ist kurzes Video https://youtu.be/l3vFwI-a4TQ

XAML

<TextBox Text="{Binding NewNote.Title}" /> 

Seite Modellansicht

class NotesPageViewModel : INotifyPropertyChanged 
{ 
    public ObservableCollection<NoteViewModel> Notes { get; set; } 
    public NoteViewModel NewNote { get; set; } 

    public NotesPageViewModel() 
    { 
     NewNote = new NoteViewModel(); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    internal void LoadNotes() 
    { 
     using (var uow = new UnitOfWork()) 
     { 
      Notes.Clear(); 
      uow.NotesRepository.OrderBy(n => n.Position).ToList() 
       .ForEach(note => Notes.Add((NoteViewModel)note)); 
     } 
    } 

    internal void AddNote() 
    { 
     if (string.IsNullOrWhiteSpace(NewNote.Title)) 
      return; 

     using (var uow = new UnitOfWork()) 
     { 
      uow.NotesRepository.Add((Note)NewNote); 
      uow.Complete(); 
     } 
     NewNote.Title = ""; 
     LoadNotes(); 
    } 
} 

Objektansicht Modell

class NoteViewModel : INotifyPropertyChanged 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

Antwort

1

Sie sind nicht die OnPr Aufruf opertyChanged auf dem Viewmodel, wenn Sie die Eigenschaft sind Einstellung

class NoteViewModel : INotifyPropertyChanged 
{ 
    private int _id; 

    public int Id 
    { 
     get { return _id; } 
     set 
     { 
      _id = value; 
      OnPropertyChanged("Id"); 
     } 
    } 

    private string _title; 

    public string Title 
    { 
     get { return _title; } 
     set 
     { 
      _title = value; 
      OnPropertyChanged("Title"); 
     } 
    } 


    public event PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

Auch sollten die LoadNotes und addnotes über einen Befehl aufgerufen werden, und der neue Titel soll als Parameter gesendet werden. https://msdn.microsoft.com/en-us/library/ms752308(v=vs.110).aspx

+0

Ich habe gerade fantastische Bibliothek gefunden, ich kann [ImplementPropertyChanged] einfach über Klasse-Deklaration setzen, es heißt Fody –

Verwandte Themen