Note that there are some explanatory texts on larger screens.

plurals
  1. POWPF MEF + Prism initial Region loading
    primarykey
    data
    text
    <p>I have written an MVVM app in WPF using MEF and Prism with three different regions. Code is across two modules, being discovered in the App.Config.</p> <p>I have all the navigation commands and structure working perfectly fine, but the one thing I am confused on is how to set the initial Views loaded into each region at app startup as there seems to be nowhere I can do this. Furthermore if I add something to the end of the MainViewModel constructor to explicitly navigate to screen set A, something else seems to be overriding it and loading a different set of views to start with.</p> <p>It also seems dependent on what order I load the modules in on the app.config which seems undesirable. If I load the Admin module last, it loads a set of screens from the admin module, if I load the search module last, it loads a set of views from the search module and in this case, it is not even finding a View for the main region.</p> <p>What is the method for specifying what Views are loaded into each region at app startup when using MEF and config discovery?</p> <pre><code>using System; using System.ComponentModel.Composition; using Microsoft.Practices.Prism.Regions; namespace CRM.GUI.WPF.Shared.Infrastructure.Behaviour { [Export(typeof(AutoPopulateExportedViewsBehavior))] [PartCreationPolicy(CreationPolicy.NonShared)] public class AutoPopulateExportedViewsBehavior : RegionBehavior, IPartImportsSatisfiedNotification { protected override void OnAttach() { AddRegisteredViews(); } public void OnImportsSatisfied() { AddRegisteredViews(); } private void AddRegisteredViews() { if (Region != null) { foreach (var viewEntry in RegisteredViews) { if (viewEntry.Metadata.RegionName == Region.Name) { var view = viewEntry.Value; if (!Region.Views.Contains(view)) { Region.Add(view); } } } } } [ImportMany(AllowRecomposition = true)] public Lazy&lt;object, IViewRegionRegistration&gt;[] RegisteredViews { get; set; } } } [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] [MetadataAttribute] public class ViewExportAttribute : ExportAttribute, IViewRegionRegistration { public ViewExportAttribute() : base(typeof(object)) { } public ViewExportAttribute(string viewName) : base(viewName, typeof(object)) { } public string RegionName { get; set; } } </code></pre> <p>Used</p> <pre><code>[ViewExport(RegionName = RegionNames.MainRegion)] public partial class ReportView </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload