2016-05-22 8 views
-1

Ich verwende das Caliburn.Micro-Framework. Auf seiner documentation page wird gesagt, dass:So binden Sie View- und ViewModel in Entwurfszeit, wenn ViewModel Parameter benötigt

Sie haben eine Desinger-Datacontext zu setzen und CM sagen seine Magie aus Ihrer Sicht XAML zu aktivieren:

<Window 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:vm="clr-namespace:CaliburnDesignTimeData.ViewModels" 
    xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform" 
    mc:Ignorable="d" 
    d:DataContext="{d:DesignInstance Type=vm:MainPageViewModel, IsDesignTimeCreatable=True}" 
    cal:Bind.AtDesignTime="True"> 

Damit dies funktioniert, das Ansichtsmodell muss eine haben Standardkonstruktor. Wenn dies nicht geeignet ist, können Sie auch einen ViewModelLocator für Ihre Design-Time-ViewModel-Erstellung verwenden.

Ich möchte mein ViewModel mit einem Parameter erstellt werden. Wie kann ich den ViewModelLocator verwenden?

Antwort

0

Hier ist ein guter Artikel über Design Time Support für Caliburn.Micro. https://spin.atomicobject.com/2015/10/19/caliburn-micro-design-time/

Grundsätzlich binden Sie eine Ansichtsmodell-Instanz zu d: Datacontext mit einem ViewModelLocator (umgesetzt und als Wandler verwendet wird) Instantiieren Viewmodel durch Caliburn eingebaut in SimpleContainer. Auf diese Weise können Sie Ihre Abhängigkeiten mit dem Container einrichten und einfach eine Instanz Ihres Ansichtsmodells mit IoC.Get() erstellen und in Ihrer IValueConverter.Convert() -Methode zurückgeben.

+0

Ich habe es schon gefunden, danke. Glauben Sie, dass es eine gute Idee ist, den IoC im ViewModel-Projekt zu definieren? – EngineerSpock

+0

In dem Artikel instanziiert er einen neuen SimpleContainer und weist die generischen Delegaten GetInstance, GetAllInstances und BuildUp IoC den übereinstimmenden Methoden des neu erstellten SimpleContainer zu. Ich glaube, dass Sie den bereits eingerichteten IoC auf Ihrem AppBootstrapper wiederverwenden können (da dies innerhalb von Initialize() geschieht), wenn Sie keinen benutzerdefinierten IoC erstellen möchten. – Doom5

Verwandte Themen