2017-05-22 12 views
0

これは状況です。私はMVVMを持つWPFプロジェクトを持っています。 ViewModelにPersonViewModel.csがあり、このビューの後ろに、すべての人とのListViewを示しPersonView.xamlMVVM更新新しいビューが別のビューで追加されたときのリストビュー

...私はそれを説明してみましょう。ここでListView PersonListが塗りつぶされます。 PersonView.xaml

は、別のビュー、NewPersonView.xaml ViewModelにNewPersonViewModel.csその背後にあるを開くボタンです。新しい人が追加されたとき、私はそうNewPersonView.xamlに保存]ボタンをクリックしたときに

にはどうすればPersonView.xaml上のリストビューをリフレッシュすることができますか?

必要に応じてコードを提供できますか?

EDIT:私は新しいPersonを追加すると、それをSQLデータベースに保存します。それを初期化するときにこれを行うには

+0

ListViewがObservableCollectionにバインドされている場合、自動的に発生します。あなたのためにそのように動作していない場合は、何が間違っているか把握できるようにコードを提供する必要があります。 – AQuirky

+0

彼らはまったく同じビューモデルを共有する必要があります。 – Will

答えて

0

一つの方法は、あなたのNewPersonViewModelにアクションを渡している。

private void AddPerson(Person per) { 
    PersonList.Add(per); 
    NotifyOfPropertyChange(() => PersonList); // this wont be needed if you use ObservableCollection 
} 

NewPersonViewModel.Initialize:

private Action<Person> _addPersonAction; 

Initialize(Action<Person> addPersonAction) { 
    _addPersonAction = addPersonAction; 
} 

あなたは人を追加したい場合はこれを呼び出すことができますアクション。

編集:

あなたがのIoCを使用していけない場合は、このような何かを行うことができます。 (擬似コード)

  1. イベントを追加しますが、あなたのPersonView.xaml.cs
  2. にButton_OnClickのように優先mothod
  3. var view = new NewPersonView();
  4. ((NewPersonViewModel)view.DataContext).Initialize(((PersonViewModel)DataContext).AddPerson); 明らかに、AddPersonはpuplicでなければなりません。

このソリューションはクリーンではありませんが動作するはずです。私はcastle windsor IoCを使用することをおすすめします。

編集2:もののことを見つけることPersonList.CollectionChanged += ...、その後、あなたはデシベルに追加する必要がアイテムを見つけるためにe.NewItemsを使用してe.OldItemsを:あなたは、データベースの変更内容を保存したい場合は、このような何かを行うことができ

削除する。

PersonViewModelでこれを行います。

関連する問題