J'ai un moyen d'obtenir ce fonctionnement, mais il semble un peu le code malodorant donc de meilleures réponses sont les bienvenues. J'ai créé une classe statique contenant une instance du CompositionHost
. Il a une méthode pour résoudre les importations. Le code derrière la vue appelle la classe statique pour créer son modèle de vue.
public static class Container
{
public static CompositionHost Host { get; set; }
public static T Get<T>()
{
T obj = Host.GetExport<T>();
Host.SatisfyImports(obj);
return obj;
}
}
Dans la classe App
:
public override async Task OnStartAsync(StartKind startKind, IActivatedEventArgs args)
{
var config = new ContainerConfiguration();
Container.Host = config.WithAssembly(GetType().GetTypeInfo().Assembly).CreateContainer();
await NavigationService.NavigateAsync(typeof(Views.MainPage));
}
Dans le code de la vue derrière:
public sealed partial class MainPage : Page
{
private MainPageViewModel ViewModel { get; }
public MainPage()
{
InitializeComponent();
NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
ViewModel = Container.Get<MainPageViewModel>();
DataContext = ViewModel;
}
}
Gardez à l'esprit que T10 est plus d'une page premier cadre, alors que quelque chose comme Caliburn.Micro est plus approprié pour MEF (qui est une inclusion de première classe dans ce cadre), car il s'agit d'un premier cadre ViewModel. En réponse à la question sacrément difficile. Étant donné que les machines virtuelles dans T10 sont généralement liées à la page au moment du design. – mvermef
Merci. Va vérifier Caliburn.Micro pour voir si elle est plus appropriée. –