В чем разница между IRegion.Add и IRegionManager.RegisterViewWithRegion в Composite WPF (Prism)? - PullRequest
14 голосов
/ 14 сентября 2009

В Составной WPF (Prism) , при добавлении модулей в коллекцию IRegionManger, в чем разница между использованием IRegion.Add и IRegionManager.RegisterViewWithRegion?

IRegion.Add

public void Initialize()
{
    _regionManager.Regions["MainRegion"].Add( new ModuleAView() );
}

IRegionManager.RegisterViewWithRegion

public void Initialize()
{
    _regionManager.RegisterViewWithRegion( "MainRegion", typeof( ModuleAView ) );
}

Ответы [ 2 ]

15 голосов
/ 14 сентября 2009

Разница в том, кто отвечает за создание представления. В сценарии IRegion.Add (также называемом View Injection ) вы отвечаете за создание экземпляра представления заранее. В другом сценарии с RegisterViewWithRegion (также называемым Обнаружение представления ) менеджер региона создает экземпляр самого представления.

Есть некоторые технические причины, по которым вы хотели бы сделать одно или другое. Например

  • у вас был более сложный способ создания представлений (может быть, вы хотите создать представление и его ViewModel и объединить их, установив свойство DataContext самостоятельно), вам нужно использовать View Injection
  • если вы воспользуетесь областями действия региона, вам придется использовать View Injection.

Соответствующая документация: Для представления View (включая представление View Injection vs. View Discovery и обсуждения подходов View-First или View-Presenter-First): http://msdn.microsoft.com/en-us/library/dd458944.aspx

Есть также очень удобный раздел «когда использовать каждый». Вот выдержка из документов:

  • Явный или программный контроль над созданием представления и отображается или когда вам нужно удалить вид из региона, для пример, в результате применения логика.
  • Для отображения нескольких экземпляров одних и тех же видов в регионе, где каждый экземпляр представления связан с разные данные.
  • Чтобы контролировать, какой экземпляр региона добавляется представление (для Например, если вы хотите добавить детальный вид клиента для конкретного подробности региона клиента). Обратите внимание, что этот сценарий требует определения регионы, описанные позже в этом тема.

Надеюсь, это поможет.

1 голос
/ 14 сентября 2009

RegisterViewWithRegion вызывает событие OnContentRegistered, но, конечно, это не может иметь место в зависимости от вашего DI

...