C# prism 框架


定義Region (RegionManager)

定義Region 的方式有兩種,一個是在XMAL界面指定,另一種這是代碼當中指定。

RegionManager.RegionName(XMAL)

RegionManager.SetRegionName (Code)

 

RegionManager 除了定義區域,還有一下功能:

維護區域集合

提供對區域的訪問

合成視圖

區域導航

定義區域

-----------------------------------------------------------------------------------

xml 文件

 <ContentControl prism:RegionManager.RegionName="ContentRegion" />

 

C# code

 

public MainWindow(IRegionManager regionManager)
{
InitializeComponent();
_regionManager = regionManager;
_regionManager.RegisterViewWithRegion("MainStack", typeof(Login));
this.Loaded += MainWindow_Loaded; this.Loaded += MainWindow_Loaded;
}

---------------------

自定義adapter

 

public class StackPanelAdapter : RegionAdapterBase<StackPanel>
{
  protected StackPanelAdapter(IRegionBehaviorFactory regionBehaviorFactory):base(regionBehaviorFactory)
  {

  }
  protected override void Adapt(IRegion region, StackPanel regionTarget)
  {

    region.Views.CollectionChanged += (s, e) =>
    {
      if(e.Action==System.Collections.Specialized.NotifyCollectionChangedAction.Add)
      {
        foreach( FrameworkElement item in e.NewItems)
        {
          regionTarget.Children.Add(item);
        }

      }
    };

   }

  protected override IRegion CreateRegion()
  {
    return new Region();
  }
}

 

app  code 注冊Adaptor

 

   public partial class App

    {

        protected override Window CreateShell()

        {

            return Container.Resolve<MainWindow>();

        }

 

        protected override void RegisterTypes(IContainerRegistry containerRegistry)

        {

            // containerRegistry.RegisterForNavigation<Login>();

            //containerRegistry.RegisterForNavigation<CreateAccount>();

        }

        protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings AdapterMappings)

        {

            base.ConfigureRegionAdapterMappings(AdapterMappings);

            AdapterMappings.RegisterMapping(typeof(StackPanel),Container.Resolve<StackPanelAdapter>());

        }

    }

 

-----------------------------------------

頁面的跳轉

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
  containerRegistry.RegisterForNavigation<PageA>();
  containerRegistry.RegisterForNavigation<PageB>();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
  _regionManager.RequestNavigate("MainRegion", "PageA");
}

 

module 的使用

public class MainModuleModule : IModule
{
  public void OnInitialized(IContainerProvider containerProvider)
  {
    var _RegionManager=containerProvider.Resolve<IRegionManager>();
    var region= _RegionManager.Regions["MainRegion"];

    region.RequestNavigate("ViewA");
  }

  public void RegisterTypes(IContainerRegistry containerRegistry)
  {
    containerRegistry.RegisterForNavigation<ViewA>();
  }
}

--------------------------------------------------------------------------------------------

 

 public partial class App

    {

        protected override Window CreateShell()

        {

            return Container.Resolve<MainWindow>();

        }

 

        protected override void RegisterTypes(IContainerRegistry containerRegistry)

        {

            containerRegistry.RegisterForNavigation<PageA>();

            containerRegistry.RegisterForNavigation<PageB>();

        }

        protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings AdapterMappings)

        {

            base.ConfigureRegionAdapterMappings(AdapterMappings);

            AdapterMappings.RegisterMapping(typeof(StackPanel),Container.Resolve<StackPanelAdapter>());

 

 

        }

        protected override IModuleCatalog CreateModuleCatalog()

        {

            return new ConfigurationModuleCatalog(); //目錄創建於配置文件

        }

        protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)

        {

            moduleCatalog.AddModule<MainModule.MainModuleModule>();

        }

    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM