Как зарегистрировать обработчик сообщений до вызова блокировки ShowDialog ()?

Я используюПосланник класса для того, чтобы отправить данные между моделями представления. ЕстьAppView в нем размещены два основных представления в элементе управления контентом, и до сих пор не было проблем с отправкой / получением данных таким способом.

Выпуск:

Теперь я добавилProductView это показывает отдельный диалог к ​​AppView. Но когда я звонюMessenger.Default.Send<ProductModel>(SelectedProduct); после вызова .ShowDetailDialog () это блокируетSend вызов кода, пока диалог не закроется.

Я попробовал наоборот, вызываяSend сначала код, а затем открыв диалоговое окно. Но это означает, что обработчик сообщений в принимающей виртуальной машине не регистрируется вовремя перед отправкой сообщения.

Кто-нибудь знает решение, чтобы диалоговое окно не блокировало отправку вызова? Или в качестве альтернативы зарегистрировать обработчик сообщений ProductVM до отправки сообщения и отображения диалогового окна?

Ниже приведена сводка связанных классов:

CustomerOrdersVM (отправка кода):

    private void EditOrder(object obj)
    {
        _dialogService.ShowDetailDialog();    
        Messenger.Default.Send<ProductModel>(SelectedProduct);            
    }

ProductVM (получение кода):

    public ProductViewModel()
    {
        Messenger.Default.Register<ProductModel>(this, OnSelectedProductReceived);              
    }

DialogService:

class DialogService : IDialogService
{

    Window productView = null;

    public DialogService()
    {

    }


    public void ShowDetailDialog()
    {
         productView = new ProductView();
        productView.ShowDialog();
    }
}

AppVM (основные виртуальные машины зарегистрированы, ProductVM не зависит от этой виртуальной машины):

    public ApplicationViewModel()
    {
        // Add available pages
        PageViewModels.Add(new CustomerDetailsViewModel(customerDataService, countryDataService, dialogService));
        PageViewModels.Add(new CustomerOrdersViewModel(orderDataService, dialogService));
        PageViewModels.Add(new OrderStatisticsViewModel());

        // Set starting page
        CurrentPageViewModel = PageViewModels[0];  
    }

AppView: (содержит представления AppVM):

<Window x:Class="MongoDBApp.Views.ApplicationView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:views="clr-namespace:MongoDBApp.Views"
        xmlns:vm="clr-namespace:MongoDBApp.ViewModels">


    <Window.Resources>
        <DataTemplate DataType="{x:Type vm:CustomerDetailsViewModel}">
            <views:CustomerDetailsView />
        </DataTemplate>
        <DataTemplate DataType="{x:Type vm:CustomerOrdersViewModel}">
            <views:CustomerOrdersView />
        </DataTemplate>
        <DataTemplate DataType="{x:Type vm:OrderStatisticsViewModel}">
            <views:OrderStatisticsView />
        </DataTemplate>
    </Window.Resources>

    <Window.DataContext>
        <vm:ApplicationViewModel />
    </Window.DataContext>

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height=".07*" />
            <RowDefinition Height="1*" />
        </Grid.RowDefinitions>


        <TabControl Grid.Row="1"
                    ItemsSource="{Binding PageViewModels}"
                    SelectedItem="{Binding CurrentPageViewModel}"
                    TabStripPlacement="Top">
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}" />
                </DataTemplate>
            </TabControl.ItemTemplate>
            <TabControl.ItemContainerStyle>
                <Style TargetType="{x:Type TabItem}">
                    <Setter Property="IsEnabled" Value="{Binding IsEnabled}" />
                </Style>
            </TabControl.ItemContainerStyle>
        </TabControl>
    </Grid>
</Window>

Ответы на вопрос(1)

Ваш ответ на вопрос