Я нахожусь в процессе изучения структуры Prism, и я уже прошел путь.Но мне было интересно, как создавать панели инструментов (и контекстные меню), где каждый модуль может регистрировать свои собственные кнопки.
Для этого примера я хочу, чтобы все кнопки находились в одном элементе управления ToolBar, который находится в моей оболочке.Панели инструментов ItemsSource
привязываются к свойству ToolBarItems
типа ObservableCollection<FrameworkElement>
в модели представления.Элементы могут быть добавлены в эту коллекцию, используя сервис 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
, и кнопки отображаются правильно.Пока все хорошо.
Проблема в том, как я могу контролировать, когда эти кнопки должны быть снова удалены.Если я перейду к представлению в другом модуле (и иногда к другому представлению в том же модуле), я хочу, чтобы эти специфичные для модуля кнопки снова были скрыты.
Есть ли у вас какие-либо предложения о том, как это сделать?Я неправильно подхожу к этой проблеме или могу изменить то, что у меня уже есть?Как вы решили эту проблему?