gpt4 book ai didi

c# - 如何通过使用 MVVM 的 Prism (+ MEF) View 中的特定控件的可用性来控制 WPF 4.5 Ribbons 上下文选项卡的可见性?

转载 作者:行者123 更新时间:2023-12-03 10:46:33 34 4
gpt4 key购买 nike

我正在使用带有 MEF、WPF 4.5 和 MVVM 模式的 Prism 5 创建一个模块化桌面应用程序。

应用程序外壳有一个包含应用程序菜单的功能区控件、一个显示可用模块下拉列表的主页选项卡、一个上下文选项卡组控件,用于在处理包含 DataGrid 的 View 显示的数据时激活 (ContextualTabGroupHeader="Grid Tools ”)。 Ribbon 控件还有一个 Prism 区域(RibbonRegion),模块可以在其中添加自己的选项卡组。 shell 中唯一的其他控件是定义另一个 Prism 区域 (MainRegion) 的内容控件。

当一个模块被选中时,它可以选择提供加载到 shell 的 RibbonRegion 和/或 MainRegion 区域的 View 。我使用在聚合目录配置期间读取的 MEF [ExportMetaData] 属性来管理它,例如:

[ExportMetadata("ModuleDisplayName", "Example #1")]
[ExportMetadata("MainMenuView", "ExampleModule.Views.ExampleMenuView")]
[ExportMetadata("MainView", "ExampleModule.Views.ExampleTabsView")]

加载到 MainRegion 中的模块 View 可以是任何能够添加到内容控件的内容 - 例如,它可以是包含 Tab 控件的用户控件,该控件定义了另一个模块特定的 Prism 区域,模块可以将一个或多个包含以下内容的选项卡加载到该区域中 View 以响应模块功能区选项卡命令。
大多数模块将具有 1 个或多个可以使用 DataGrid 控件显示数据的 View ,我希望使许多工具(例如标记、排序、过滤、计算等)通常可用于包含在具有 View 模型 datacontext 实现特定接口(interface)以响应上下文选项卡命令(例如 IGridTools)。

问题:到目前为止,所有这些都运行良好:我可以激活不同的模块并导航 View 并在 DataGrid 控件中显示数据 - 但现在我遇到了我的问题:如何使“网格工具”上下文选项卡可见/hidden 以响应 DataGrid 控件变得可用/不可用(假设继承的数据上下文或 View 模型当然实现了所需的接口(interface))?

我可以检测何时导航到/离开 View ,但在模块使用选项卡控件显示多个 View (可能包含也可能不包含数据网格)的情况下,我还需要知道所选选项卡何时具有必要条件显示功能区上下文选项卡。我见过使用 IActiveAware 的示例,但通常人们乐于使用 Focus/LostFocus 事件来更改 IsActive bool 属性。问题在于,包含 DataGrid 的 View 可能有也可能没有其他可能获得焦点的控件(主 Ribbon 控件也可能如此),但如果 DataGrid 仍然可见,我希望上下文网格工具功能区选项卡也保持可见。

最佳答案

一种可能的解决方案如下:

考虑到区域是在 上定义的内容控制 , 你可以问 地区 对于事件 View ,在这种情况下只有一个,即唯一的 事件 View 正在显示。

因此,您不需要 焦点/失焦 事件。 地区 将负责更新其事件 View 每次导航到不同的 时列出标签 查看 .

最后,为了决定是显示还是隐藏网格工具,您应该评估 地区的 ActiveView 包含 网格 控制与否。您可以通过查看 来实现此目的。 UserControl的内容属性(property)。

我希望这对你有所帮助,问候。

关于c# - 如何通过使用 MVVM 的 Prism (+ MEF) View 中的特定控件的可用性来控制 WPF 4.5 Ribbons 上下文选项卡的可见性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23787311/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com