У меня есть приложение-призма, содержащее Shell.xaml (с MainRegion), ShellViewModel.cs.
Это окно оболочки открывается при запуске приложения.Теперь я хочу открыть второе всплывающее окно, содержащее то же самое окно оболочки (Shell.xaml, ShellViewModel).
Определение оболочки похоже на пример призмы StockTraderRI.Shell.xaml содержит MainRegion (очень упрощенный источник):
<Window x:Class="Bsoft.Test.Shell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.codeplex.com/CompositeWPF"
Title="MainWindow" Height="550" Width="825">
<Grid>
<ContentControl cal:RegionManager.RegionName="MainRegion"/>
</Grid>
</Window>
Код позади содержит только базовую ссылку ViewModel:
namespace Bsoft.Test.bmedApp
{
[Export]
public partial class Shell : Window
{
[ImportingConstructor]
public Shell()
{
InitializeComponent();
}
[Import]
ShellViewModel ViewModel
{
set
{
this.DataContext = value;
}
}
}
}
ShellViewModel автоматически вставляется загрузчиком MEF:
namespace Bsoft.Test.bmedApp
{
[Export]
public class ShellViewModel : NotificationObject
{
[ImportingConstructor]
public ShellViewModel()
{
}
}
}
Это работает так, как задумано.
Теперь я хочу во второй раз открыть окно оболочки в качестве всплывающего окна.Достаточно просто пометить Shell и ViewModel как не используемые совместно, используя:
[PartCreationPolicy(CreationPolicy.NonShared)]
Но мои проблемы:
1) Я загружаю другие View (Модели) в MainRegion.Как мне сообщить программе, нужно ли загружать View (Model) в основной Shell MainRegion или во всплывающее окно MainRegion?Я предполагаю, что мне нужны RegionManager с областями видимости, но я понятия не имел, как их использовать для этого.
2) У меня есть некоторые события (EventAggregator) для представлений, загруженных в регион для передачи уведомлений и команд (статусОбновление, просмотр закрытия, ошибки) для Shell, чтобы сообщить.Как я могу отделить основные события оболочки от событий всплывающего окна (так как оба являются одной и той же оболочкой)?
Я хочу иметь возможность открывать несколько всплывающих окон, поэтому использование разных имен регионов для обоихдостаточно для меня, мне нужно больше разделения.Может быть, есть способ создать отдельную внутреннюю структуру призмы / mef / region / container ??