Gestion de la fenêtre Caliburn Micro WPF

Je souhaite démarrer une application WPF avec caliburn.micro afin de pouvoir utiliser TDD autant que possible. J’ai déjà utilisé caliburn.micro avec WP7, mais WPF semble être un autre navire et la documentation n’est pas aussi complète comme celle de WP7.

J’ai mis en place le projet avec mon Bootstrapper

public class ApplicationBootstrapper : Bootstrapper { private SimpleContainer _container; private WindowManager _windowManager; protected override void Configure() { _container = new SimpleContainer(); _windowManager = new WindowManager(); _container.RegisterSingleton(typeof(MainViewModel), "MainViewModel", typeof(MainViewModel)); _container.RegisterSingleton(typeof(DataViewModel), "DataViewModel", typeof(DataViewModel)); } protected override object GetInstance(Type service, ssortingng key) { return _container.GetInstance(service, key); } protected override IEnumerable GetAllInstances(Type service) { return _container.GetAllInstances(service); } protected override void BuildUp(object instance) { _container.BuildUp(instance); } protected override void OnStartup(object sender, System.Windows.StartupEventArgs e) { _windowManager.ShowWindow(_container.GetInstance(typeof(MainViewModel), "MainViewModel")); } } 

et cela charge bien MainView, ce qui m’a fait penser que j’avais gagné, mais je voulais ensuite passer à autre chose et disposer d’une autre configuration view / modelmodel, mais je ne parviens pas à faire passer le WindowManager à mon ViewModel afin de charger plus de vues (comme je l’ai fait avec NavigationService dans WP7)

Voici mon code MainViewModel

 public class MainViewModel : BaseViewModel { private readonly DataViewModel _dataViewModel; private readonly IWindowManager _windowManager; public MainViewModel(IWindowManager windowManager, DataViewModel dataViewModel) { _dataViewModel = dataViewModel; _windowManager = windowManager; } public ssortingng Title { get { return ApplicationTitle; } } public void BtnNew() { System.Diagnostics.Debug.WriteLine(_windowManager == null); } public void BtnLoad() { MessageBox.Show("Sorry, not yet implemented"); } } 

Mais le gestionnaire de fenêtres et le DataViewModel sont toujours nuls. Lorsque j’ai cherché sur Internet une solution, j’ai trouvé qu’il s’agissait bien du WindowManager que je voulais utiliser et de quelque chose à propos de MEFBootStrapper? mais j’aurais pensé que les conventions-frameworks que j’ai utilisées sur WP7 auraient transféré une tonne de mieux que ce qu’il semble être.

Le conteneur simple est juste la recette fournie par caliburn.micro sur leur site, et celle que j’ai utilisée dans les applications WP7

vous n’avez pas enregistré WindowManager avec le conteneur IOC. Jetez un oeil à l’exemple de projet Caliburn.Micro.HelloWindowManager.

vous pouvez le télécharger ici: http://caliburnmicro.codeplex.com/releases/view/70940