2016-08-07 14 views
0

私はメモとテキストボックスを持つ単純なギャラリーを持ち、タイトルごとに新しいものを追加します。 私はmvvmを使用し、他のバインディングは正しく動作します。 メモのタイトルを設定してプロパティの追加をクリックすると、NewNote.Titleが更新され、オブジェクトがデータベースに保存されます。その後、私はNewNote.Titleをクリアしますが、UIは更新されません。ここWpfバインドされたプロパティが双方向モードで更新されない

が短いビデオhttps://youtu.be/l3vFwI-a4TQ

XAML

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

ページビューモデル

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

オブジェクト・ビューモデルです

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

答えて

1

あなたはOnPrを呼び出していませんあなたはまた、

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

プロパティを設定しているときのviewmodelにopertyChanged、LoadNotesとAddNotesは、コマンド経由で呼び出されなければなりませんし、新しいタイトルをパラメータとして送信する必要があります。 https://msdn.microsoft.com/en-us/library/ms752308(v=vs.110).aspx

+0

私はちょうど素晴らしいライブラリを見つけました、私は[ImplementPropertyChanged]をFodyと呼ばれるクラス宣言の上に置くことができます –

関連する問題