Oui, c'est tout à fait possible.
Tout d'abord, assurez-vous que les packages NuGet sont installés.
Par exemple, pour Prism et Unity, vous avez besoin de :
Ajouter des dossiers manquants (juste pour l'ordre)
Et déplacez votre page existante vers le dossier Views
, mais n'oubliez pas de ajuster les espaces de noms sinon votre liaison ne fonctionnera tout simplement pas.
Changer le type de base de l'application
N'oubliez pas de changer le type de base de l'application dans le code et le XAML.
using Prism.Unity;
using Xamarin.Forms;
namespace XamPrismShared
{
public partial class App : PrismApplication
{
public App (IPlatformInitializer platformInitializer):base(platformInitializer)
{
}
}
}
Définir la première page et son ViewModel
Implémentez OnInitialized et RegisterTypes. N'oubliez pas que vous devez enregistrer chaque type que vous souhaitez utiliser avec Prism en tant que page.
using Prism.Unity;
using Xamarin.Forms;
namespace XamPrismShared
{
public partial class App : PrismApplication
{
public App (IPlatformInitializer platformInitializer):base(platformInitializer)
{
}
protected override void OnInitialized()
{
InitializeComponent();
NavigationService.NavigateAsync("MainPage");
}
protected override void RegisterTypes()
{
Container.RegisterTypeForNavigation();
Container.RegisterTypeForNavigation();
}
}
}
Si vous avez des pages existantes
Ajoutez ViewModelLocator.AutowireViewModel="True"
à vos vues existantes afin de permettre à Prism de se lier automatiquement à leur ViewModel respectif.
Ajouter le ViewModel manquant
using Prism.Mvvm;
namespace XamPrismShared.ViewModels
{
public class MainPageViewModel : BindableBase
{
public MainPageViewModel()
{
Title = "Salut de Prism.";
}
public string Title { get; set; }
}
}
Ajouter des initialiseurs de plateforme dans chaque projet de plateforme
Ajoutez les initialiseurs de plateforme manquants et corrigez le chargement de Xamarin.Forms.
-
Pour Android,
using Android.App;
using Android.Content.PM;
using Android.OS;
using Microsoft.Practices.Unity;
using Prism.Unity;
namespace XamPrismShared.Droid
{
[Activity (Label = "XamPrismShared", Icon = "@drawable/icon", Theme="@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate (Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate (bundle);
global::Xamarin.Forms.Forms.Init (this, bundle);
LoadApplication (new XamPrismShared.App(new AndroidPlatformInitializer()));
}
}
public class AndroidPlatformInitializer : IPlatformInitializer
{
public void RegisterTypes(IUnityContainer container)
{
}
}
}
-
Pour iOS,
using Foundation;
using Microsoft.Practices.Unity;
using Prism.Unity;
using UIKit;
namespace XamPrismShared.iOS
{
[Register("AppDelegate")]
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
global::Xamarin.Forms.Forms.Init ();
LoadApplication (new XamPrismShared.App(new iOSPlatformInitializer()));
return base.FinishedLaunching (app, options);
}
}
public class iOSPlatformInitializer : IPlatformInitializer
{
public void RegisterTypes(IUnityContainer container)
{
}
}
}
Et voilà
Si vous avez des questions ou souhaitez vérifier, vous pouvez consulter le code sur Github https://github.com/jesulink2514/Xamarin-Prism-shared-project