我是Prism的新手,在Brian介绍棱镜的教程之后,我创建了一个定制的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();我做错什么了?
发布于 2018-10-27 18:02:14
应该在ConfigureRegionAdapterMappings的覆盖中配置区域适配器映射,而不是在伪装成那样的ConfigureContainer覆盖中配置区域适配器映射。
protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
var regionAdapterMappings = base.ConfigureRegionAdapterMappings();
regionAdapterMappings.RegisterMapping(typeof(StackPanel), ServiceLocator.Current.GetInstance<StackPanelRegionAdapter>());
return regionAdapterMappings;
} 提示:您得到了异常,因为ConfigureContainer是在ConfigureServiceLocator和base.ConfigureRegionAdapterMappings使用ServiceLocator.Current之前调用的。
https://stackoverflow.com/questions/53024579
复制相似问题