これは私がそれを管理した方法です。
1)メニューアイテムコレクションの領域に名前を付けます。
<controls:HamburgerMenu.ItemsSource>
<controls:HamburgerMenuItemCollection prism:RegionManager.RegionName="MenuRegion"/>
</controls:HamburgerMenu.ItemsSource>
2)HamburgerMenuItemCollection
public class HamburgerMenuItemCollectionRegionAdapter : RegionAdapterBase<HamburgerMenuItemCollection>
{
public HamburgerMenuItemCollectionRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory)
: base(regionBehaviorFactory)
{
}
protected override void Adapt(IRegion region, HamburgerMenuItemCollection regionTarget)
{
region.Views.CollectionChanged += (s, e) =>
{
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
foreach (HamburgerMenuGlyphItem element in e.NewItems)
{
regionTarget.Add(element);
}
}
};
}
protected override IRegion CreateRegion()
{
return new AllActiveRegion();
}
}
3)ブートストラップでアダプタを登録するための領域のアダプタを定義します。
protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
RegionAdapterMappings mappings = base.ConfigureRegionAdapterMappings();
mappings.RegisterMapping(typeof(HamburgerMenuItemCollection), Container.Resolve<HamburgerMenuItemCollectionRegionAdapter>());
return mappings;
}
4)プリズムモジュール
public partial class OptionOneMenuItem : HamburgerMenuGlyphItem
{
public OptionOneMenuItem()
{
Glyph = "/Assets/OptionOne.png";
Label = "Option One";
Command = ApplicationCommands.NavigateCommand;
CommandParameter = typeof(OptionOnePageView);
InitializeComponent();
}
}
5)最後に、モジュールinitialsationのメニュー項目をレジスタにメニュー項目を定義します。回答のため
protected override void InitializeModule()
{
RegionManager.RegisterViewWithRegion("MenuRegion", typeof(MyOptionOneMenuItem));
RegionManager.RegisterViewWithRegion("MenuRegion", typeof(MyOptionTwoMenuItem));
}
おかげで、 は、私はすでに(あなたの提案に似て)自分で解決策を見つけた:) – Malte
私は、このソリューションを試してみましたが、私は、無効なキャスト例外を取得しています。 また、メソッドが基本クラスに存在しないため、継承されたクラスコンストラクタからInitializeComponentを呼び出す方法はありません。 –
コードを投稿できますか?私はあなたがInitializeComponentをなぜ呼び出す必要があるのかよく分かりません。これと例外の場所を表示できますか? –