2017-02-28 12 views
0

필요에 따라 사전 정의 된 영역에로드 할 모듈을 정의 할 수있는 구성 파일이있는 프리즘 MVVM 응용 프로그램이 필요합니다.프리즘 MVVM : 구성 파일을 통해 주문형 모듈로드

버튼을 클릭하면 구성 파일을 확인하고 모듈을로드하여 특정 영역에 배치해야합니다.

PRISM Modularity Quickstart에서 ModuleE가 맞습니까?

누군가 작은 예제를 만들 수 있습니까?

편집 : 지금까지이 있습니다

MainWindow.xaml

<Window x:Class="MmuTest2.Views.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:prism="http://prismlibrary.com/" 
     prism:ViewModelLocator.AutoWireViewModel="True" 
     Title="{Binding Title}" Height="350" Width="525"> 
    <Grid Margin="10"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <ItemsControl Grid.Row="0" 
         Grid.Column="0" 
         prism:RegionManager.RegionName="ModuleA" /> 
     <ItemsControl Grid.Row="0" 
         Grid.Column="1" 
         prism:RegionManager.RegionName="ModuleB" /> 
     <ItemsControl Grid.Row="1" 
         Grid.Column="0" 
         prism:RegionManager.RegionName="ModuleC" /> 
     <Button 
      Grid.Row="1" 
      Grid.Column="1" 
      Command="{Binding LoadCommand}">Load Modules on demand</Button> 
    </Grid> 

</Window> 

MainWindowViewModel.cs

using System; 
using System.Windows; 
using System.Windows.Input; 
using System.Windows.Threading; 
using Prism.Commands; 
using Prism.Modularity; 
using Prism.Mvvm; 

namespace MmuTest2.ViewModels 
{ 
    public class MainWindowViewModel : BindableBase 
    { 
     private string _title = "Prism Unity Application"; 

     public string Title 
     { 
      get { return _title; } 
      set { SetProperty(ref _title, value); } 
     } 

     public MainWindowViewModel() 
     { 

      this.LoadCommand = new DelegateCommand(
       () => { 

        // Load Modules! 

       }, 
       () => true 
      ); 
        } 

     public ICommand LoadCommand { get; private set; } 
    } 
} 

ModuleA.cs

using System; 
using Microsoft.Practices.Unity; 
using Prism.Unity; 
using MmuTest2.Views; 
using System.Windows; 
using Prism.Modularity; 

namespace MmuTest2 
{ 
    class Bootstrapper : UnityBootstrapper 
    { 
     protected override DependencyObject CreateShell() 
     { 
      return Container.Resolve<MainWindow>(); 
     } 

     protected override void InitializeShell() 
     { 
      Application.Current.MainWindow.Show(); 
     } 

     protected override IModuleCatalog CreateModuleCatalog() 
     { 
      ModuleCatalog catalog = new ConfigurationModuleCatalog(); 
      return catalog; 

     } 

     protected override void ConfigureModuleCatalog() 
     { 
      ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog; 
      moduleCatalog.AddModule(typeof(ModuleA.ModuleA)); 
     } 
    } 
} 

EDIT

using Prism.Modularity; 
using Prism.Regions; 
using System; 

namespace ModuleA 
{ 
    [Module(ModuleName = "ModuleA")] 
    public class ModuleA : IModule 
    { 
     IRegionManager _regionManager; 

     public ModuleA(RegionManager regionManager) 
     { 
      _regionManager = regionManager; 
     } 

     public void Initialize() 
     { 
      this 
      ._regionManager 
      .RegisterViewWithRegion("ModuleA", typeof(Views.ModuleAView)); 
     } 
    } 
} 

Bootstrapper.cs : 는 동적으로 디렉토리 모니터링을 통해 모듈로드 할 quick and dirty way을 발견했다. 이제 구성 파일을 통해 새 모듈을 표시 할 영역을 지정하는 방법이 필요합니다.

+0

당신은 많은 코드를 게시하지만 시도하고 문제를 해결하는 코드에서 아무것도하지 않았다있다. 구성 파일에서 정보를 읽는 방법을 알고 있다면이 작업을 수행 할 수 있어야합니다. –

답변