问题标签 [region-management]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
328 浏览

wpf - 使用 WPF Prism 可以防止两个模块尝试同时使用同一个区域吗?

这是我正在尝试做的事情的概述。我在外壳中有一个区域用于应用程序模式对话框。当一个模块想要启动一个应用程序模式对话框时,它会将一个自定义 Lightbox 控件加载到该区域中,并用我想要显示的内容(警告、向导等)填充它。我在 shell 中定义了该区域,因为我认为灯箱背景需要它来阻挡整个窗口。

想到的直接情况是,如果两个模块试图同时使用该区域会发生什么情况,是否有任何方法可以防止另一个模块访问该区域,直到该区域的当前使用完成之后?

如果有更好的方法来完成我想要的,我愿意接受建议。

0 投票
1 回答
552 浏览

wpf - 是否有可能使 WPF 无模式视图成为模式视图?

我正在使用 Prism 弹出区域并且弹出是无模式的。当我尝试更改 Prism 示例代码以替换.Show().ShowDialog()命令时,代码变得不稳定。所以,我需要保持当前代码不变,并想出一个解决方法:将无模式模式更改为模式模式。

我不知道该怎么做和/或这是否可能。如果你知道怎么做,请分享。谢谢!

0 投票
1 回答
178 浏览

silverlight - 多外壳应用程序?

我是棱镜的新手。

  1. 想象一个场景,您想要开发一个多区域应用程序,但应该有多种类型的屏幕,我希望这些区域仅在一个屏幕中,而例如在作为应用程序地图的主页中(如在 QuickBooks ,见下图),应该没有区域,整个布局应该不同。

  2. 我还希望该应用程序仅适用于注册用户;未注册的用户会被自动转发到 LoginView,他们不应该看到区域等。

这两个方面是如何实现的?

QuickBooks 主页

0 投票
2 回答
2556 浏览

wpf - WPF/Prism:视图返回 System.Object

我是 WPF 和 Prism 的新手,但我已经了解到您必须在 Unity 中将视图注册为对象:

不过,当我使用

MyView 显示为 System.Object,并且 CallbackResult 不包含错误。

我错过了什么?如果需要,我很乐意提供更多信息。

0 投票
4 回答
8563 浏览

ios - didEnterRegion 在前台工作,但不在后台或其他 VC 中工作

如果应用程序正在运行并且 CLLocationManagerDelegate 类是前台(即可见),那么 didEnterRegions 会触发,我会同时获得 NSLog 和 AlertView。但是,当应用程序在后台时,或者本质上,如果屏幕显示除委托类之外的任何内容,我什么也得不到。

我在 plist 中的“必需的后台模式”下设置了“应用程序注册以进行位置更新”,尽管我不确定这是否有必要。

这是我认为的相关代码,尽管我可能是错的(并且很乐意添加更多)。我应该注意 viewDidLoad 中的所有内容都包含在 if 中,它检查区域监控是否可用并启用。

这是我在 AppDelegate.m 中获得被监控区域列表的地方:

我调用 startMonitoringForRegion 两次,这里是主要的地方:

因为我觉得它可能很重要,所以这里是 locationManager 的 getter:

更新 1:通过 Apple 论坛(我在其中交叉发布)有人提到 AlertView 只会显示在前台。NSLog 仍然没有触发。我假设这应该有效。

0 投票
1 回答
1175 浏览

wpf - WPF Prism 确认多个区域的导航请求

我有一个包含三个区域的应用程序。区域 A 是一个导航区域,用于保存应用程序中模块的导航项。区域 B 和 C 是模块的内容区域。我还有两个模块 Module1 和 Module2,每个模块都有一个导航项控件加载到区域 A。区域 A 包含 NavigationItemMod1Control 和 NavigationItemMod2Control。

NavigationItemMod1Control 绑定到将 view1B 加载到区域 B 并将 view1C 加载到区域 C 的命令(NavigationItemMod2Control 具有类似的命令)。命令执行方法如下图:

当我单击 NavigationItemMod2Control 时,我想在将视图 2B 或视图 2C 加载到各个区域之前确认导航。

我已经在 Module 1 中的 View1B 的视图模型上成功实现了 IConfirmNavigationRequest ,但这仅控制区域 B 的导航。如果用户取消导航请求,区域 B 正确地保留为 View1B,但 View2C 被加载到区域 C 中。

关于如何为两个区域确认一次导航的任何建议?

0 投票
1 回答
725 浏览

c# - 通过 Scoped RegionManager 的区域向 ItemsControl 的 ItemsSource 添加视图

我正在尝试通过一个区域填充ItemsSourcea ComboBox(的衍生物)。ItemsControl

看法

范围RegionManager(在视图模型上找到)通过 分配给视图prism:RegionManager.RegionManager="{Binding RegionManager}"

主窗口.xaml

主窗口.xaml.cs

视图模型

视图模型通过 分配给视图的 DataContext prism:ViewModelLocator.AutoWireViewModel="True"

MainWindowViewModel.cs

区域名称.cs

引导程序

应用程序.xaml

应用程序.xaml.cs

RegionCreationTesterBootstrapper.cs

一旦所有区域人口都发生并且应用程序即将运行,我会收到一个Prism.Regions.UpdateRegionsException包含 InnerException 的消息,该消息"Region with the given name is already registered: collectionRegion"位于App. new RegionCreationTesterBootstrapper().Run()我能够获得断点命中的代码中的最后一行是new MainWindow()CreateShell调用 MainWindow 的构造函数退出之后的 in 。为什么我只尝试注册一次时却被告知该区域已经注册?我在 MainWindow 的构造函数中设置了断点,以确实确认它只创建一次,即使不是,RegionManager它的作用域也应该防止发生此异常。我错过了什么?

更新

我刚刚注释掉了其中的代码PopulateItemsControl,发现即使只有一个视图被添加到该区域并且仍然陌生,如果没有向该区域添加视图但该区域被访问(如行中所做的那样var region = RegionManager.Regions[RegionNames.itemsControlRegion];:) . 因此,现在的问题与访问作用域 RegionManager 上的现有区域以进行视图注入有关,以便向其中添加视图;我不确定为什么从 RegionManager 访问一个区域会改变它的状态,这似乎是 Prism 中的一个错误,或者可能与惰性枚举有关。

0 投票
1 回答
246 浏览

c# - WPF 从视图类中获取 RegionName

WPF 应用程序,使用 Prism。

我正在使用多阶段模块初始化程序,并且在模块的初始化中,我希望模块能够自我检查视图并注册其中定义的任何区域。

我正在使用类似于下面的代码来自我检查视图模型类并注册其他东西,但我不知道如何反映到视图中。

下面是我想自行注册的基于选项卡的区域(在视图/用户控件上定义)的示例;

主要我想提取该行中定义的 RegionName;

我不知道如何做到这一点,任何帮助将不胜感激

非常感谢

2018 年 17 月 10 日更新:我想要实现的目标。

我正在编写一个 WPF 应用程序框架,其中包含大约 30 个模块(并且正在扩展),它们都订阅和注入服务。

我所有的区域都在视图中声明,并且有很多。由于我的框架中的开发要求,现在模块需要在模块初始化阶段预先注册它们的区域。原因之一是某些服务以特定区域为目标,并且每个主机都具有独特的操作设置。目前主机模块负责设置,这意味着如果对服务的操作设置进行更改,则需要在模块和项目之间进行大量剪切和粘贴。通过主机预注册,在模块初始化中,服务模块知道哪些模块使用它的服务,并且可以将设置类注入到主机模块设置视图模型中以供用户交互。

我一直在寻找一种简单的方法来从众多模块程序集中提取名称,而无需显式声明它们或使用声明性属性装饰视图模型。

0 投票
1 回答
275 浏览

wpf - 使用带有 IsNavigationTarget 的 Prism 处理嵌套视图,可以返回 false

我正在尝试为以下问题找到解决方案。我有一个 WPF 应用程序,我使用 mvvm 和 prism(最新版本 7)来构建它。这是我处理的表单/对话框的草稿: 用户对话结构

MainView 具有区域 - region1,我根据树视图中选择的内容将 SubViewA 注入到 region1。此视图表示树项内容。SubViewA itslef 具有区域 - region2,另一个视图 - SubViewB 基于组合框选择被注入到 region2 中。

我使用 INavigationAware 来管理对该区域的注入。

因此,要将视图注入我从 MainViewModel 使用的区域,请执行以下操作:

在 SubViewAViewModel 中,我实现了 INavigationAware,为了重用创建的视图,我检查是否创建了每个树项的视图。为此,我将 treeitemId 添加到参数中,然后在 IsNavigationTarget 方法中检查此 ID,如下所示:

当我想将 SubViewB 注入 SubViewA 的区域 2 时,我使用的方法相同。大多数情况下,当用户更改下拉选择时,会注入新的 SubViewB。

现在我的问题是——如果我在 SubViewBViewModel 中使用 INavigationAware 并且当 IsNavigationTarget 总是返回 true 时——一切都很好。当我尝试重用视图并再次选择返回 true 或 false 时,当我在树视图中选择第二个项目时,出现异常:“具有给定名称的区域已注册” - prism 抱怨 region2 已注册。

我知道当显示视图时我可以拥有服务并始终从服务中填充数据,因此我不需要重用视图。但这是一个更学术的问题——解决它的正确方法是什么?

PS 我尝试注册作用域区域管理器,但没有成功,我的问题是我不知道创建新作用域管理器的最佳位置在哪里以及如何将其注入视图模型。Parent 的 ViewModel 不是个好地方,因为我必须公开视图。如果我尝试使用附加行为,那么似乎区域内容会在调用行为之前更新。

PS2 我从复数视觉(Brian Lagunas)中找到了一个示例,他在其中创建了两个外壳,但它与我想要实现的不同。他在创建窗口的那一刻为每个窗口创建新的范围管理器。而且,如果窗口本身具有与我上面显示的相同的结构,它也会失败。

PS3 我观看了 Brian Lagunas 最近从头开始编写前景的流媒体,他的方法基于行为,他将一些视图与依赖视图相关联,它工作正常,但在他的示例中,依赖视图再次不包含区域。

谢谢你。

0 投票
1 回答
577 浏览

c# - 使用嵌套视图时 Prism 7 抛出和异常

几个月前我发布了类似的问题使用带有 IsNavigationTarget 的 Prism 的嵌套视图可以返回 false,我仍然不确定什么是正确的方法。

假设你有一个视图 A,在这个视图 A 中你已经声明了一个区域 A,然后你将一个视图 B 注入到这个区域 A 中。类似地,在视图 B 中你已经注册了一个区域 B,然后你将一个视图 C 注入到这个区域中B. 如下图所示:

在此处输入图像描述

在 ViewA 的 ViewModelA 中,我有一个方法 SetUpSubViews() 我在其中调用:

View B 的 ViewModelB 实现 INavigationAware。所以在 OnNavigatedTo() 方法中我调用:

View C 的 ViewModelC 也实现了 INavigationAware。

现在,我在 IsNavigationTarget() 方法中同时拥有 ViewModelB 和 ViewModelC :

这意味着我想在每次导航此视图时创建新视图。

ViewB 和 ViewC 都实现了 IRegionMemberLifetime 接口,我在其中设置:

这意味着我不想重用视图,我希望它被处理掉。

视图中的区域声明如下:

现在,当我第一次在 ViewModelA 上调用 SetUpSubViews() 方法时,一切都很好。第二次调用它时,我看到了异常:

具有给定名称的区域已注册...

我需要的是有一种方法可以在每次需要时从头开始重新创建视图<->视图模型对。似乎在处理视图时,棱镜不会删除在已删除视图中声明的区域。向社区和棱镜开发人员提问,如何以正确的方式做到这一点?

当前的解决方案并不令人满意,这就是我要做的:第 1 步 - 我在 INavigationAware 部分的 ViewModelB 和 ViewModelC 中设置

这向 prism 发出信号不要创建新视图,并且可能还意味着如果在视图中找到任何区域,则不要在区域管理器中注册它。

第 2 步 - 当我需要向区域注入视图时,我手动删除旧视图并创建新视图。所以我的 SetUpSubViews() 方法如下所示:

同样,我必须从 ViewB 上的区域 regionB 中删除 ViewC。(这里是 region.RemoveAll() 是关键行。)

Step3 - 我没有在 viewB 和 viewC 上实现 IRegionMemberLifetime 接口。

它有效,但看起来不正确。

PS我也尝试过作用域管理器,但我不知道如何将新创建的作用域管理器传播到视图模型,因为它们是自动创建的,如果我通过构造函数解决它,我会得到主全局管理器而不是作用域。

谢谢。