我是Prism的新手,并按照Brian Lagunas的“棱镜简介”教程进行操作,并且正在创建一个如下所示的自定义regionAdapter。
public class StackPanelRegionAdapter : RegionAdapterBase<StackPanel>
{
public StackPanelRegionAdapter(IRegionBehaviorFactory regionBehavior )
:base(regionBehavior)
{
}
protected override void Adapt(IRegion region, StackPanel regionTarget)
{
region.Views.CollectionChanged += (s, e) =>
{
if(e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
foreach(FrameworkElement frameworkElement in e.NewItems)
{
regionTarget.Children.Add(frameworkElement);
}
}
};
}
protected override IRegion CreateRegion()
{
return new AllActiveRegion();
}
}
protected override void ConfigureContainer()
{
RegionAdapterMappings regionAdapterMappings = base.ConfigureRegionAdapterMappings();
regionAdapterMappings.RegisterMapping(typeof(StackPanel),
Container.Resolve<StackPanelRegionAdapter>());
}
我要例外
System.InvalidOperationException:必须设置ServiceLocationProvider
在这里
RegionAdapterMappings regionAdapterMappings = base.ConfigureRegionAdapterMappings();
我做错了什么?
答案 0 :(得分:0)
您应该在ConfigureRegionAdapterMappings
的替代中配置区域适配器映射,而不是在伪装成ConfigureContainer
的{{1}}替代中进行配置。
protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
var regionAdapterMappings = base.ConfigureRegionAdapterMappings();
regionAdapterMappings.RegisterMapping(typeof(StackPanel), ServiceLocator.Current.GetInstance<StackPanelRegionAdapter>());
return regionAdapterMappings;
}
提示:您会得到例外,因为ConfigureContainer
在ConfigureServiceLocator
之前被调用,而base.ConfigureRegionAdapterMappings
使用ServiceLocator.Current
。