필요에 따라 사전 정의 된 영역에로드 할 모듈을 정의 할 수있는 구성 파일이있는 프리즘 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을 발견했다. 이제 구성 파일을 통해 새 모듈을 표시 할 영역을 지정하는 방법이 필요합니다.
당신은 많은 코드를 게시하지만 시도하고 문제를 해결하는 코드에서 아무것도하지 않았다있다. 구성 파일에서 정보를 읽는 방법을 알고 있다면이 작업을 수행 할 수 있어야합니다. –