vistas vista usar una pasar pagina mvc multiples modelos misma llamar lista desde controlador asp c# wpf mvvm viewmodel

c# - usar - pasar una lista del controlador a la vista mvc



¿Cómo llamar funciones en un modelo de vista principal desde otros modelos de vista? (1)

El método delegate utilizado en esto y la respuesta vinculada se puede utilizar en cualquier relación padre-hijo y en cualquier dirección. Eso incluye desde un modelo de vista hijo a un modelo de vista padre, un código de Window detrás del código detrás de una Window secundaria, o incluso relaciones de datos puros sin ninguna interfaz de usuario involucrada. Puede encontrar más información sobre el uso de objetos delegate de la página Delegados (Guía de programación C #) en MSDN.

Acabo de responder una pregunta similar a esta hoy. Si echas un vistazo a los parámetros de Passing entre la publicación viewmodels , verás que la respuesta implica el uso de objetos delegate . Simplemente puede reemplazar estos delegate (de la respuesta) con su (s) método (es) y funcionará de la misma manera.

Por favor hazme saber si tienes preguntas.

ACTUALIZACIÓN >>>

Sí, lo siento, olvidé por completo que quería llamar a métodos en su lugar ... He estado trabajando en demasiados mensajes esta noche. Así que sigue usando el ejemplo de la otra publicación, simplemente llama a tu método en el controlador ParameterViewModel_OnParameterChange :

public void ParameterViewModel_OnParameterChange(string parameter) { // Call your method here }

Piense en el delegate como su camino de regreso al modelo de vista padre ... es como crear un evento llamado ReadyForYouToCallMethodNow. De hecho, ni siquiera necesita tener un parámetro de entrada. Podrías definir a tu delegate así:

public delegate void ReadyForUpdate(); public ReadyForUpdate OnReadyForUpdate { get; set; }

Luego, en el modelo de vista padre (después de adjuntar el controlador como en el otro ejemplo):

public void ChildViewModel_OnReadyForUpdate() { // Call your method here UpdateDisplay(); }

Como tiene varios modelos de vista infantil, puede definir el delegate en otra clase a la que ambos tengan acceso. Avísame si tienes más preguntas.

ACTUALIZACIÓN 2 >>>

Después de leer tu último comentario nuevamente, he pensado en un método mucho más simple que podría lograr lo que quieres ... al menos, si te entiendo correctamente. Es posible Bind directamente desde las vistas de su hijo a su modelo de vista padre. Por ejemplo, esto le permitiría Button.Command una propiedad Button.Command en una vista secundaria a una propiedad ICommand en su modelo de vista padre:

En TreeViewView :

<Button Content="Click Me" Command="{Binding DataContext.ParentCommand, RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />

Por supuesto, esto supone que una instancia del modelo de vista padre en cuestión se establece como el DataContext de MainWindow .

Mi programa está compuesto por un TreeView y dos contentPresenters a nivel del suelo. MainWindow, TreeView y cada contentPresenter tienen sus propios viewModels.

Me gustaría llamar a una función en mainWindowViewModel desde TreeViewViewModel .

Necesito hacer esto porque mainWindowViewModel controla lo que se muestra en contentPresenters , y me gustaría actualizar manualmente la pantalla.

Supongo que haría algo como esto ...

TreeViewViewModel :

public class TreeViewViewModel { //Do I need to declare the MainWindowVM? public TreeViewViewModel() { ... } private void function() { //Command that affects display //Manually call function in MainWindowVM to refresh View } }

He intentado acceder al MainWindowVM desde TreeViewViewModel utilizando:

public MainWindowViewModel ViewModel { get { return DataContext as MainWindowViewModel; } }

Pero no tiene mucho sentido. porque el MWVM no es el DataContext del TreeViewViewModel .