Prism コードサンプル学習:03-CustomRegions
はじめに
以下の記事の続きです。
https://qiita.com/mngreen/items/14ad9c89fef988d7c4e5
03-CustomRegions
本サンプルではRegionAdapterBaseクラスを用いて、既存のコントロールに領域の名称を与えるサンプルのようです。
<Window x:Class="Regions.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/"
Title="Shell" Height="350" Width="525">
<Grid>
<StackPanel prism:RegionManager.RegionName="ContentRegion" />
</Grid>
</Window>
public class StackPanelRegionAdapter : RegionAdapterBase<StackPanel>
{
public StackPanelRegionAdapter(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 element in e.NewItems)
{
regionTarget.Children.Add(element);
}
}
//handle remove
};
}
protected override IRegion CreateRegion()
{
return new AllActiveRegion();
}
}
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : PrismApplication
{
... (省略) ...
protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings regionAdapterMappings)
{
base.ConfigureRegionAdapterMappings(regionAdapterMappings);
regionAdapterMappings.RegisterMapping(typeof(StackPanel), Container.Resolve<StackPanelRegionAdapter>());
}
}
- ConfigureRegionAdapterMappingsメソッドで、領域のマッピングが登録される
- ConfigureRegionAdapterMappingsメソッドはBootstrap.Runメソッド内で呼び出される
- RegionAdapterBase<T>クラスはこちら
- AdaptメソッドはInitializeメソッドの中で呼び出される
- AdaptメソッドでViewに追加された子要素に対して、追加・削除時の処理を実装できそう
- IRegionAdapter.Initializeメソッドの中でこのクラスで実装されているInitializeメソッドで呼び出される。
- 上記のインターフェース+メソッド名で定義されるのは明示的なインターフェースの実装
- CreateRegionメソッドも同様にInitialilzeメソッドの中で呼び出される。
おわりに
今回はRegionAdapterBaseクラスのソースコードを中心に読みました。
一部現段階ではわからない実装もあるため、それを明らかにできるように引き続き読んでいきます。
次回、04-ViewDiscoveryについて見ていこうと思います。