2013-02-18 13 views
5

Sto sviluppando un'applicazione WPF utilizzando il kit di strumenti MVVM. Ho un datagrid nella mia finestra principale. Ho creato un'altra finestra denominata "openfile" e i loro viewmodels. La classe viewmodel della finestra principale contiene proprietà pubbliche di tipo ObservableCollection MyList che è associato a Datagrid.Can Posso compilare questa proprietà dal ViewFodel di openfile e collegarlo automaticamente a Datagrid? oppure posso passare un varaible a MainViewmodel e effettuare una chiamata a una funzione pubblica nel MainViewmodel da OpenfileViewmodel?Passaggio dei valori tra Viewmodel in MVVM in WPF

Questo è il modo in cui sto chiamando MyPage dalla barra dei 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; 
      } 
     } 

Grazie in anticipo. Roshil K

+0

Vuoi essere in grado di fornire qualche esempio di codice per lo scenario che si sta descrivendo? Se MyList è già associato a Datagrid, qualsiasi aggiornamento all'elenco dovrebbe aggiornare automaticamente la griglia. se MyList è una proprietà pubblica e il file aperto VM ha un riferimento alla tua VM principale, dovresti essere in grado di popolarlo direttamente. – Dutts

+0

Come si apre la vista 'OpenFile'? –

+0

Sto aprendo la finestra OpenFile dalla barra dei menu. –

risposta

3

Dopo un po 'di ricerca ho ottenuto l'istanza corrente del mio Mainviewmodel dal seguente codice.

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

poi ho avuto tutti i metodi e properties..and tenuti i dati da un altro ViewModel.

grazie a tutti ..

1

Il modo più semplice è quello di passare esempio MainWindowViewModel 's per OpenFileViewModel:

public class OpenFileViewModel 
{ 
    private MainWindowViewModel _parent; 

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

Dopo di che è possibile chiamare/accedere a qualsiasi pubblico metodo/proprietà in MainWindowViewModel:

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

È possibile creare una classe che può essere il vostro "mediatore di servizio" e sarà sedersi tra le ViewModel. Puoi registrare il tuo servizio di mediazione e aggiungere eventi che puoi generare da una VM e gestirli in un'altra. Può essere come:

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 
} 

Spero che questo aiuto voi ..

Problemi correlati