2013-02-18 9 views
5

Zajmuję się tworzeniem aplikacji WPF przy użyciu lekkiego zestawu narzędzi MVVM. Mam datagrid w moim Mainwindow.I stworzyłem inne okno o nazwie "openfile" i ich viewmodels.Main Window viewmodel klasa zawiera własność publiczną typu ObservableCollection MyList, który jest związany z Datagrid.Can mogę wypełnić tę właściwość z openfile Viewmodel i automatycznie powiązać Datagrid? czy mogę przekazać zmienną do MainViewmodel i wykonać wywołanie funkcji publicznej w MainViewmodel z OpenfileViewmodel?Przekazywanie wartości między Viewmodel w MVVM w WPF

Oto jak nazywam MyPage z paska Menu.

private void NotificationMessageReceived(NotificationMessage msg) 
     { 
      switch (msg.Notification) 
      { 
       case Messages.MainVM_Notofication_ShowNewbWindow: 
        new NewView().ShowDialog(); 
        break; 
       case Messages.MainVM_Notofication_ShowExistingWindow: 
        new OpenExisitingView().ShowDialog(); 
        break; 

       case Messages.MainVM_Notofication_ShowotherWindow: 
        newView().ShowDialog(); 
        break; 
      } 
     } 

Dzięki z góry. Roshil K

+0

byłbyś w stanie zapewnić pewne przykładowy kod dla scenariusza są opisujące? Jeśli MyList jest już powiązany z Datagridem, wszelkie aktualizacje listy powinny automatycznie aktualizować twoją siatkę. jeśli MyList jest własnością publiczną, a otwarta maszyna wirtualna ma odniesienie do głównej maszyny wirtualnej, powinieneś być w stanie wypełnić ją bezpośrednio. – Dutts

+0

Jak otworzyć widok "OpenFile"? –

+0

Otwieram okno OpenFile z paska menu. –

Odpowiedz

3

Po trochę badań dostałem bieżące wystąpienie mojego Mainviewmodel przez następujący kod.

MainViewModel mainViewModelInstaince = ServiceLocator.Current.GetInstance<MainViewModel>(); 

następnie dostałem wszystkie metody i właściwości .. i powiązałem dane z innego viewmodelu.

podziękowania dla wszystkich ..

1

Najprostszym sposobem jest przejść instancję MainWindowViewModel dydaktycznego do OpenFileViewModel:

public class OpenFileViewModel 
{ 
    private MainWindowViewModel _parent; 

    public OpenFileViewModel(MainWindowViewModel parent) 
    { 
      _parent = parent; 
    } 
} 

Po tym można zadzwonić/dostęp do dowolnego publiczne Metoda/nieruchomość w MainWindowViewModel:

foreach (var item in _parent.myList) 
{ 
    ... 
} 
1

Można utworzyć klasę, która może być twój „Service Mediator” i będzie siedzieć między ViewModels. Możesz zarejestrować swoją usługę mediatora i dodać zdarzenia, które możesz podnieść z jednej maszyny wirtualnej i obsługiwać w innej. Może to być tak:

public class MediatorService: IMediatorService 
{ 
    public dynamic Data { get; set;} 
    public event EventHandler<YourCustomEventArgs> Callback = delegate { } 
} 

public class XYZVM(IMediatorService mediatorService) 
{ 
// set your Data here and handle Callback event here and refresh your grid. 
// you can get anything from your "YourCustomEventArgs" which you will set from ABCVM 
} 

public class ABCVM(IMediatorService mediatorService) 
{ 
// get your data here and raise callback here and handle that in XYZVM 
} 

nadzieję, że to pomoże Ci ..

Powiązane problemy