gpt4 book ai didi

wpf - Prism/MVVM (MEF/WPF) : Exposing navigation [Menu's for example] from modules

转载 作者:行者123 更新时间:2023-12-04 01:07:46 24 4
gpt4 key购买 nike

我开始使用 MEF 和 WPF 首次涉足 Prism v4/MVVM 世界。我已经成功构建了一个 shell,并且使用 MEF,我能够发现和初始化模块。但是,我不确定为这些模块公开的 View 提供导航的正确方法。

例如,假设其中一个模块公开了三个 View ,我想在菜单控件上显示到这些 View 的导航。到目前为止,我已经成功暴露了一个基于 MenuItem 的 View 。这个MenuItem包含 child MenuItem控制从而提供可以使用的命令层次结构。伟大的。

问题是,这感觉不对。我现在在我的模块中声明导航(以及外壳)必须支持使用菜单。如果我想改用 ToolBar 怎么办?甚至是 Ribbon .然后我将不得不更改我的所有模块以公开外壳的相应控件类型。

我环顾四周,在一些网站上提到了使用“服务”提供导航,在模块初始化期间,导航选项被添加到服务中,而该服务又被 shell 用来以任何方式显示此导航它想要的格式( ToolBarTreeViewRibbonMenuItem 等) - 但我找不到任何实际这样做的例子。

为了透视所有这些,我最终希望能够从菜单和/或其他导航控件(可能是 Ribbon)中选择 View ,然后在 TabControl 中按需打开这些 View 。我已经能够在 TabControl 中创建 View 了。在模块初始化时,现在我需要下一步。

我需要知道的是:什么是公开导航选项的正确方法,而不是坚持由 shell 支持特定控件,如果服务是要走的路,那么人们将如何放置这在 Prism/MVVM 模式中一起使用。

提前感谢您提供的任何见解。

最佳答案

我想你有一个包含通用接口(interface)的主模块。
您可以创建一个简单的界面,例如

public interface IMenuService {
void AddItem(string name, Action action);
IEnumerable<MenuItemViewModel> GetItems { get; }
}

创建 1 个实现和一个实例。
public class MenuService : IMenuService {

private readonly IList<MenuItemViewModel> items = new List<MenuItemViewModel>();

void AddItem(string name, Action action) {
items.Add(new MenuItemViewModel {
Name = name,
Action = action
});
}

IEnumerable<MenuItemViewModel> GetItems {
get { return list.AsEnumerable(); }
}
}

在您的模块中,使用 MEF 解析此实例并调用 AddItem()登记您的意见。 Action property 是一个简单的委托(delegate),用于激活 View 或执行任何其他操作。

然后在你的 shell 或任何 View 中,你只需要调用 GetItems属性来填充您的菜单。

关于wpf - Prism/MVVM (MEF/WPF) : Exposing navigation [Menu's for example] from modules,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4178732/

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