我在哪里向单个区域添加行为?

Mar*_*arc 5 prism mef

我的问题很简单,但所有的选项都让我感到困惑......

在我的 MEF/Prism 应用程序中,我想将特定行为附加到一个特定区域。doumentation 说,你可以这样做:

IRegion region = regionManager.Region["Region1"];
region.Behaviors.Add("MyBehavior", new MyRegion());
Run Code Online (Sandbox Code Playgroud)

但是我应该把它放在哪里?有没有地方,这应该用引导程序方法完成?目前,我在 shell 的 Loaded-event 中添加了这样的行为:

    /// <summary>
    /// Interaction logic for Shell.xaml
    /// </summary>
    [Export(typeof(Shell))]
    public partial class Shell
    {
        [ImportingConstructor]
        public Shell(IRegionManager regionManager, ElementViewInjectionBehavior elementViewInjectionBehavior)
        {
            InitializeComponent();
            Loaded += (sender, args) =>
                          {
                              IRegion region = regionManager.Regions[RegionNames.ElementViewRegion];
                              region.Behaviors.Add("ElementViewInjection", elementViewInjectionBehavior);
                          };
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是一个很好的解决方案。我宁愿在引导程序中执行此操作,以便在与其他区域行为注册 ( ConfigureDefaultRegionBehaviors())相同的位置执行此操作。

因此,问题是:将行为添加到单个区域的最佳位置在哪里?

Ric*_*end 1

我们遇到了同样的问题 - 最后我们只是检查了区域行为中的区域名称,并且仅当它是我们想要的区域时才采取行动,有点糟糕,因为您将行为附加到所有区域 - 但对我们来说更好比建议的解决方案..

一个例子如下:

public class TrackViewOpenerBehaviour : IRegionBehavior
{
    public IRegion Region { get; set; }
    public void Attach()
    {
        if (this.Region.Name == ApplicationRegions.WorkspaceRegion
            || this.Region.Name == ApplicationRegions.DialogRegion)
        {
             this.Region.Views.CollectionChanged += (sender, e) =>
             {
                 //Code Here.
             };

        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

我一直认为也许我们可以创建一个行为,负责为我们将其他行为附加到特定区域,然后我们可以在引导程序中注册它 - 但从未抽出时间来实现它。