Начало в Prism

#c# #wpf #prism-4

#c# #wpf #prism-4

Вопрос:

Я совершенно новичок в Prism (составной Wpf). Я хочу создать модуль обмена сообщениями для своего приложения: невидимую панель в верхней части главного окна, которая появляется при вызове ShowMessage(string message) (и исчезает, например, через 5 секунд).

Что я сделал:

  • Создать проект инфраструктуры (содержит только один интерфейс IUIMessagesService )
  • Создать проект модуля:

    • Проект содержит пользовательский элемент управления — это панель для сообщения (просмотра)

    • Проект содержит UIMessagesService класс, который реализует IUIMessagesService

    • В классе module я сделал так:

    public UIMessagesModule(IRegionManager regionManager, IUnityContainer container)
    {
    _regionManager = regionManager;
    _container = container;
    }

и

     public void Initialize()
    {
        _regionManager.RegisterViewWithRegion("UIMessagesRegion", typeof(UIMessagesView));
        _container.RegisterType<IUIMessagesService, UIMessagesService>(new ContainerControlledLifetimeManager());
    }
  
  • Создайте проект оболочки (загрузчик, представление оболочки с областью и т.д.)

Вопросы:

  • Как я могу изменить свойства моего представления в классе UIMessagesService (в данном случае RenderTrasform для отображения панели)? Может быть, мне нужно определить эти свойства в модели представления? Как изменить свойства модели представления?

  • Как выполнить методы модуля ShowMessages из приложения?

Ответ №1:

Для вашего первого вопроса вы можете использовать агрегацию событий,
для второго:
вы можете использовать ServiceLocator или container для разрешения вашего типа

Комментарии:

1. Нет, спасибо. Я это сделал. Но бывают моменты, когда я не совсем уверен, что делаю это правильно. В PRISM нет строгих правил.

Ответ №2:

Не уверен, что это именно то, что вы хотели. Но вы можете использовать расширяемый wpf toolkit busyindicator. Это может отображаться поверх вашего представления на глянцевом экране, и вы можете управлять этим, просто установив или привязав свойство зависимости IsBusy.

взгляните на пример здесь