Получить HostControl из области в PRISM


Существует ли в любом случае, чтобы получить hostcontrol / parentcontrol из области в PRISM C# WPF. Я пытаюсь написать поведение пользовательского региона, которое изменяет hostcontrol, если в регионе нет представлений.

В классе RegionBehavior есть свойство HostControl, но оно равно alwasy null. Как мне его установить ? или как получить контроль над Хостом. Спасибо за совет!

[Export(typeof(CollapseRegionBehavior))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class CollapseRegionBehavior : RegionBehavior, IHostAwareRegionBehavior
{

    public DependencyObject HostControl { get; set; }

    protected override void OnAttach()
    {
        if (this.Region.ActiveViews.Count() == 0)
        {

        }
    }
}
1 2

1 ответ:

Вы добавляете RegionBehavior вручную или регистрируете его в загрузчике в ConfigureDefaultRegionBehaviors?

Кажется, что если вы добавляете поведение вручную, как это:

IRegion region = regionManager.Regions["MyRegion"];
region.Behaviors.Add("MyBehaviorKey", new MyBehavior());

Интерфейс IHostAwareRegionBehavior не имеет никакого эффекта. Если вы посмотрите на исходный код PRISM в RegionBehaviorCollection.КС (Призма.Декоп.Вы ясно увидите, что метод Add не делает ничего, связанного с интерфейсом IHostAwareRegionBehavior.

Однако в RegionAdapterBase.cs, интерфейс проверяется в AttachDefaultBehaviors.

Я закончил тем, что зарегистрировал свой RegionBehavior в загрузчике и проверил имя региона, чтобы увидеть, есть ли работа, которую нужно выполнить. Не очень чисто, но работает.