IRegionManager can register view with Region but by default only works for Content Control (single item), ItemsControl (2+ Items) <ContentControl Grid.Row="1" cal:RegionManager.RegionName="{x:Static def:RegionNames.PricingGridRegion}" /> regMgr.RegisterViewWithRegion("PricingGridRegion", typeof(DurationTraderView)); <!--<ItemsControl cal:RegionManager.RegionName="{x:Static def:RegionNames.PricingGridRegion}"/>--> <StackPanel cal:RegionManager.RegionName="{x:Static def:RegionNames.PricingGridRegion}" Orientation="Horizontal" FlowDirection="RightToLeft" /> Custom Region Adapter is needed to register into Stack Panel: public class StackPanelRegionAdapter : RegionAdapterBase<StackPanel> { public StackPanelRegionAdapter(RegionBehaviorFactory factory) : base(factory) { } protected override void Adapt(IRegion region, StackPanel regionTarget) { region.Views.CollectionChanged+=(s,ea)=> { if(ea.Action== NotifyCollectionChangedAction.Add) { foreach(FrameworkElement fe in ea.NewItems) { regionTarget.Children.Add(fe); } } }; } protected override IRegion CreateRegion() { return new AllActiveRegion(); // return new SingleActiveRegion(); // if onely one item } } public class Module : IModule { public void Initialize() { IRegion reg = _regMgr.Regions[RegionNames.PricingGridRegion]; reg.Add(_container.Resolve<SampleView>()); reg.Add(_container.Resolve<SampleView>()); reg.Add(_container.Resolve<SampleView>()); reg.Add(_container.Resolve<SampleView>()); reg.Add(_container.Resolve<SampleView>()); }
Monday, August 11, 2014
Custom Region Adapter
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment