Le recomendaría que realice una lectura en el sistema de mensajería en el juego de herramientas MVVM light. Este parece ser el enfoque más simple que he encontrado para lograr esto.Aquí está un ejemplo de cómo funciona:
Si usted tiene 2 modelos de vista - 1 para los clientes que buscan, el otro para mostrar los detalles sobre el cliente seleccionado:
En primer modelo de vista, tiene una propiedad como esto:
public string CustomerID
{
get
{
return _customerid;
}
set
{
if (_efolderid == value)
{
return;
}
var oldValue = _customerid;
_customerid = value;
// Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging
RaisePropertyChanged("CustomerID", oldValue, value, true);
}
}
Luego, en el segundo modelo de vista, se registra para recibir los mensajes cuando este valor cambia de la otra, como este:
void registerForMessages()
{
Messenger.Default.Register<PropertyChangedMessage<string>>(this,
(pcm) =>
{
if (pcm.PropertyName == "CustomerID")
{
customerID = pcm.NewValue;
AddWorkplanCommand.RaiseCanExecuteChanged();
loadCustomerDetails();
}
});
}
Sé asegúrese de llamar a su función registerForMessages() en el constructor del segundo modelo de vista. Otra cosa que ayuda es a crear un mapa de clases cuando tienes 4 o más ViewModels en tu aplicación. Encuentro que es fácil construir uno en un archivo de texto rápido en la solución para hacer un seguimiento de todos los mensajes y lo que se pretende lograr, y qué otros modelos de vista están registrados para recibirlos.
Una de las cosas realmente buenas de esto es que tiene 1 viewmodel envía una notificación de cambio, como la propiedad customerID modificada, y de inmediato tienen 4 viewmodels adicionales que reciben ese cambio y todos comienzan a cargarse ellos mismos.
Mis preguntas estaban más relacionadas con la carga de diferentes vistas. Entiendo el mecanismo de enlace con un ViewModel. ¿Pero dónde escribo el código para mostrar una nueva Vista cuando el usuario ejecuta, por ejemplo, el botón "Mostrar detalles"? –