2017-05-22 8 views
0

이것은 상황입니다. MVVM을 사용하는 WPF 프로젝트가 있습니다. MVVM 업데이트 다른보기를 통해 새 항목이 추가 될 때 ListView

는 PersonView.xaml이보기 뒤에 뷰 모델 PersonViewModel.cs이, 모든 사람과의 ListView를 보여줍니다 .. 내가 그것을 설명 해보자. 여기서 ListView PersonList가 채워집니다. PersonView.xaml

또 다른보기, NewPersonView.xaml 뷰 모델 NewPersonViewModel.cs 뒤에을 여는 버튼입니다.

어떻게 새로운 사람이 추가됩니다 그래서 때 NewPersonView.xaml에 저장 버튼을 클릭했을 때 나는 PersonView.xaml에있는 ListView를 새로 고칠 수 있습니까?

필요한 경우 코드를 제공 할 수 있습니까?

EDIT : 새 인물을 추가하면 SQL 데이터베이스에 저장됩니다.

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

그냥이를 호출 할 수 있습니다를 초기화 할 때이 작업을 수행하는

+0

ListView가 ObservableCollection에 바인딩되면 자동으로 실행됩니다. 그런 식으로 작동하지 않는다면 잘못된 것을 알아낼 수 있도록 코드를 제공해야합니다. – AQuirky

+0

둘 다 똑같은 뷰 모델을 공유해야합니다. – Will

답변

0

한 가지 방법은 NewPersonViewModel에 액션을 통과 동작.

편집 :

  1. 이벤트에 추가하여 PersonView.xaml.cs
  2. 을에 Button_OnClick 같이 첨부 : (의사 코드) : 당신은 IOC의를 사용 해달라고하면

    는이 같은 작업을 수행 할 수 있습니다

  3. var view = new NewPersonView();
  4. ((NewPersonViewModel)view.DataContext).Initialize(((PersonViewModel)DataContext).AddPerson); 명백하게 AddPerson은 puplic이어야합니다.

이 솔루션은 깨끗하지는 않지만 작동해야합니다. castle windsor IoC를 사용하는 것이 좋습니다.

편집 2 : 사람 있음을 찾기 위해 PersonList.CollectionChanged += ... 한 다음 DB에 추가해야하는 항목을 찾을 수 e.NewItems을 사용 e.OldItems을 : 당신이 데이터베이스에 변경 사항을 저장하려면, 당신은 이런 식으로 뭔가를 할 수

지우는 것.

PersonViewModel에서이를 수행하십시오.