| Prism.Container.Extensions || || extension methods making the Prism Container easier to use with IServiceCollection/IServiceProvider
| Prism.Container.Extensions || || extension methods making the {{boxx|Prism Container}} easier to use with {{boxx|IServiceCollection}} {{boxx|IServiceProvider}}
|}
|}
Version du 8 août 2020 à 10:14
Introduction
Prism est un framework qui permet de développer des applications composites.
SoC - Separation of Concerns: principe de conception visant à séparer un programme informatique en blocs, chaque bloc correspondant à une fonctionnalité.
publicclassMainWindowViewModel : BindableBase
{
privatestring_title = "Prism Application";
publicstring Title
{
get => _title;
set => SetProperty(ref_title, value);
}
publicMainWindowViewModel()
{ }
}
Shell
Représente la fenêtre principale (MainWindow) qui contiendra le contenu de l'application.
Équivalent de la Master Page ASP.NET, représente le template de vue de l'application.
Le Shell contient des regions dans lesquelles les vues seront injectées.
Region
C'est un espace réservé (placeholder) pour du contenu dynamique. Permet de nommer un espace où placer une vue.
Une région n'a aucune connaissance de la vue qu'elle va contenir.
Une région n'est pas un Control mais une Attached Property qui s'applique à un Control.
Implémente IRegion.
Package regroupant toutes les fonctionnalités d'une partie de l'application. Un module correspond à une fonctionnalité majeure de l'application.
Les modules sont dans des projets séparés de type Prism Module ou WPF User Control Library.
Modules/Test/TestModule.cs
// Dans les cas où le module n'est pas chargé via le cas// il peut définir lui même son ModuleName, son InitializationMode (par défaut WhenAvailable) et ses dépendances
[Module(ModuleName = "Test", OnDemand = true)]
[ModuleDependency("")]
publicclassTestModule : IModule
{
publicTestModule(IUnityContainercontainer, IRegionManagerregionManager)
{
_container = container;
_regionManager = regionManager;
}
publicvoidInitialize()
{
_container.RegisterTypeForNavigation<ViewA>();
_regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA));
Chargement depuis le code
Le projet principal (Shell) doit avoir une référence vers les modules.
publicICommand AddCmd { get; set; }
// in the ctor
AddCmd = newDelegateCommand(Add, CanAdd);
// other solutionprivateDelegateCommandaddCmd;
public DelegateCommand AddCmd => addCmd ?? (addCmd = newDelegateCommand(Add, CanAdd));
privatevoidAdd() {}
privateboolCanAdd() { returntrue; }
// Command avec paramètres// le parametre doit être un type nullableprivateDelegateCommand<int?> addCmd2;
public DelegateCommand<int?> AddCmd2 => addCmd2 ?? (addCmd2 = newDelegateCommand<int?>(Add2, CanAdd2));
privatevoidAdd2(int? parameter) {}
privateboolCanAdd2(int? parameter) { returntrue; }
// Task-Based DelegateCommand
AddCmd = newDelegateCommand(AddAsync);
asyncvoidAddAsync()
{
awaitSomeAsyncMethod();
}
// force la réévaluation de CanExecute
AddCmd.RaiseCanExecuteChanged();
CompositeCommand
Une commande qui regroupe plusieurs autres commandes.
publicstaticclassGlobalCommands
{
publicstaticCompositeCommandSaveAllCommand = newCompositeCommand();
}
// ajout de MyCommand dans la CompositeCommand SaveAllCommand
GlobalCommands.SaveAllCommand.RegisterCommand(MyCommand);