【发布时间】:2011-03-28 16:04:40
【问题描述】:
我正在学习 Prism 框架,并且已经取得了进展。但我想知道如何创建工具栏(和上下文菜单),每个模块可以在其中注册自己的按钮。
对于这个例子,我希望所有按钮都驻留在位于我的 Shell 中的同一个 ToolBar 控件中。工具栏ItemsSource 绑定到视图模型中ObservableCollection<FrameworkElement> 类型的ToolBarItems 属性。可以使用ToolBarRegistry 服务将元素添加到此集合中。这是 ViewModel:
public class ShellViewModel
{
private IToolBarRegistry _toolBarRegistry;
private ObservableCollection<FrameworkElement> _toolBarItems;
public ShellViewModel()
{
_toolBarItems = new ObservableCollection<FrameworkElement>();
_toolBarRegistry = new ToolBarRegistry(this);
}
public ObservableCollection<FrameworkElement> ToolBarItems
{
get { return _toolBarItems; }
}
}
请注意,如果结果证明是正确的解决方案,FrameworkElement 类型的集合将被重构为更具体的类型。
我的ToolBarRegistry有注册图片按钮的方法:
public void RegisterImageButton(string imageSource, ICommand command)
{
var icon = new BitmapImage(new Uri(imageSource));
var img = new Image();
img.Source = icon;
img.Width = 16;
var btn = new Button();
btn.Content = img;
btn.Command = command;
_shellViewModel.ToolBarItems.Add(btn);
}
我从OrderModule 调用此方法,按钮正确显示。到目前为止一切顺利。
问题是我如何控制何时应该再次删除这些按钮。如果我导航到另一个模块中的视图(有时是同一模块中的另一个视图),我希望这些特定于模块的按钮再次隐藏。
您对如何执行此操作有任何建议吗?我是以错误的方式解决这个问题,还是我可以修改我已经拥有的?你是怎么解决这个问题的?
【问题讨论】: