El problema estaba en un lugar tal que nunca esperé ... Depuración del API de navegación me llevan a la RegionNavigationContentLoader
public object LoadContent(IRegion region, NavigationContext navigationContext)
cuando entré más abajo en el código, me di cuenta de una llamada a:
protected virtual IEnumerable<object> GetCandidatesFromRegion(
IRegion region,
string candidateNavigationContract)
me di cuenta que el nombramiento aquí es clave para que coincida la vista al modelo de vista.
En mi ejemplo, el nombre de cada parte fue:
public class SiteDetailsViewModel { ... } // ViewModel
public class SiteDetailsView { ... } // View
ViewNames.SiteView = "SiteView" // ViewName constant
Cuando inadvertidamente hice el siguiente cambio:
ViewName.SiteView = "SiteDetailsView"
Everthing trabajó.
Conclusión
El nombre del modelo de vista debe comenzar con el mismo nombre que utilizó para identificar su punto de vista.
He probado esto a cabo por el cambio de mi fin de:
public class MyView { ... }
y sigue utilizando el mismo nombre de la vista que se registra en el contenedor y la navegación:
_container.RegisterType<object, MyView>(ViewNames.SiteView);
...
_regionManager.RequestNavigate(RegionNames.DetailRegion,
ViewNames.SiteView + "?ID=" + site.ID);
Esto parece funcionar también .Por lo tanto, parece que el nombre de View-Model está intrínsecamente vinculado al nombre de vista utilizado para navegar a esa vista.
NOTA
Esto es sólo cuando se está utilizando la COI y la unidad con la API de PRISM 4 de navegación. Esto no parece suceder cuando se usa MEF.
Investigación Adicional
También soy consciente de que algunos guides nos han dicho a utilizar el typeof(MyView).FullName
al registrar la vista con el contenedor ...
_container.RegisterType<object, MyView>(typeof(MyView).FullName);
Yo personalmente creo que esto es un error . Al usar el nombre completo de la vista, está creando una dependencia entre la vista y cualquiera que desee navegar a esa vista ...
_regionManager.RequestNavigate(RegionNames.DetailRegion,
typeof(MyView).FullName + "?ID=" + site.ID);
sí, comportamiento extraño, encontré esta información en los comentarios a este número http://compositewpf.codeplex.com/workitem/7468?PendingVoteId=7468 –