我可以在没有视图帮助的情况下制作 SingleActiveRegion 吗?
Can I make a SingleActiveRegion without help from the view?
我有一个流畅 RibbonTabItem
的区域适配器,我希望它一次只显示一个 RibbonGroupBox
。我希望这能完成这项工作:
protected override IRegion CreateRegion()
{
return new SingleActiveRegion();
}
但它不起作用(即每当我将该区域导航到新视图时,我都会得到一个 附加 新视图),除非我让我的视图实现 IRegionMemberLifetime
和 return false
来自 KeepAlive
.
问题:我错过了什么?如何创建一个在添加新视图之前始终清除其 ViewsCollection
的区域?
我的错。我应该观察我所在地区的 ActiveViews
(而不是 Views
)...现在工作正常。
完整代码如下:
public class RibbonTabItemRegionAdapter : RegionAdapterBase<RibbonTabItem>
{
public RibbonTabItemRegionAdapter( IRegionBehaviorFactory regionBehaviorFactory ) : base( regionBehaviorFactory )
{
}
protected override void Adapt( IRegion region, RibbonTabItem regionTarget )
{
region.ActiveViews.CollectionChanged += ( s, e ) =>
{
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
foreach (var newItem in e.NewItems)
regionTarget.Groups.Add( (RibbonGroupBox)newItem );
break;
case NotifyCollectionChangedAction.Remove:
foreach (var oldItem in e.OldItems)
regionTarget.Groups.Remove( (RibbonGroupBox)oldItem );
break;
}
};
}
protected override IRegion CreateRegion()
{
return new SingleActiveRegion();
}
}
我有一个流畅 RibbonTabItem
的区域适配器,我希望它一次只显示一个 RibbonGroupBox
。我希望这能完成这项工作:
protected override IRegion CreateRegion()
{
return new SingleActiveRegion();
}
但它不起作用(即每当我将该区域导航到新视图时,我都会得到一个 附加 新视图),除非我让我的视图实现 IRegionMemberLifetime
和 return false
来自 KeepAlive
.
问题:我错过了什么?如何创建一个在添加新视图之前始终清除其 ViewsCollection
的区域?
我的错。我应该观察我所在地区的 ActiveViews
(而不是 Views
)...现在工作正常。
完整代码如下:
public class RibbonTabItemRegionAdapter : RegionAdapterBase<RibbonTabItem>
{
public RibbonTabItemRegionAdapter( IRegionBehaviorFactory regionBehaviorFactory ) : base( regionBehaviorFactory )
{
}
protected override void Adapt( IRegion region, RibbonTabItem regionTarget )
{
region.ActiveViews.CollectionChanged += ( s, e ) =>
{
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
foreach (var newItem in e.NewItems)
regionTarget.Groups.Add( (RibbonGroupBox)newItem );
break;
case NotifyCollectionChangedAction.Remove:
foreach (var oldItem in e.OldItems)
regionTarget.Groups.Remove( (RibbonGroupBox)oldItem );
break;
}
};
}
protected override IRegion CreateRegion()
{
return new SingleActiveRegion();
}
}