如何使用mvvm和WPF管理工具栏

4
我正在寻找一种在WPF中使用mvvm平稳地管理工具栏(和菜单)的方法。
考虑一个带有选项卡工作区和异构内容的UI(例如Visual Studio)。在那里,工具栏应该根据活动选项卡而隐藏或显示。您将如何设计工具栏的视图模型?
我会使用toolbar-viewmodel集合,并将ToolbarTray绑定到它,但据我所知,这是不可能的。
欢迎提出任何建议。 欢迎提供样例链接、最佳实践论文等。
1个回答

1

我最近在我的一个应用程序中遇到了同样的问题。我使用了Ribbon作为主工具栏,并根据所选模块隐藏或显示了Ribbon上的按钮。我想出了两种不同的解决方案...希望其中一种适用于你。

第一种解决方案是在应用程序的shell中创建一个区域(它可以是Grid/Canvas/任何),并根据用户点击的标签动态加载所需的工具栏到该区域。换句话说,如果您有5个不同的标签需要自己的工具栏,请创建包含工具栏的5个UserControl,并在用户单击标签时将正确的工具栏加载到区域中。接下来,您将希望响应用户单击工具栏上按钮的事件。在我的解决方案中,我使用了Mediator方法允许ViewModel彼此通信。它有效,但我不知道我是否会再次以这种方式做... CAL可能是更好的方法。

另一种解决方案是创建一个带有所有必需按钮的工具栏,并将它们的可见性绑定到ViewModel。根据用户的选择,将控件的可见性设置为您的要求。希望这些解决方案中的其中一个适用于您。
顺便问一下……你来自德国的哪个地方?我认识一个姓Stoll的人,所以我不确定这是否是一个常见的名字……

我做了与您的第一个解决方案类似的事情,但是使用了单个UserControl。主要我尝试使用DataType的DataTemplates来选择ToolBar视图,但是没有解决这个问题,所以最终我使用了相同的UserControl用于每个工具栏。项目是数据绑定的。所以这很好用,但不像您的解决方案那样灵活。 关于可见性问题,我采用了类似的方法。这可以轻松地封装成具有Merge/Unmerge方法的类。我来自巴登-符腾堡州。但是这个名字来自图林根,几代人之前。 - Michael Stoll
用户控件无法放置在ToolBarTrays中。 - Arrow_Raider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接