Prism RequestNavigate не работает во всплывающем окне

Я реализую навигацию Prism во всплывающем окне, поднятом с помощью объекта InteractionRequest. Мой основной вид содержит область TabControl с 2 представлениями (представление A, представление b). Основной вид выглядит так:

<Grid>
    <TabControl prism:RegionManager.RegionName="PrivateVehiclePopupRegion">
        <TabControl.ItemContainerStyle>
            <Style TargetType="{x:Type TabItem}">
                <Setter Property="Visibility" Value="Collapsed"/>
            </Style>
        </TabControl.ItemContainerStyle>
    </TabControl>          
</Grid>

Представление A содержит кнопку с командой для перехода к представлению B. Точно так же представление B содержит кнопку для перехода к представлению A. Все три представления используют одну и ту же модель представления (в которой я убедился, что только один экземпляр создана модель просмотра).

Представление A и представление B регистрируются в методе Initialize модуля:

public void Initialize()
{
    ...
    RegionManager.RegisterViewWithRegion(RegionNames.PrivateVehiclePopupRegion, typeof(PrivateVehiclePopupReadView)); // View A
    RegionManager.RegisterViewWithRegion(RegionNames.PrivateVehiclePopupRegion, typeof(PrivateVehiclePopupEditView));  // View B    
}

Когда я выполняю программу, загружается представление A, но когда нажимается соответствующая кнопка для перехода к другому представлению, метод NavigateToViewB() успешно достигается, но при вызове RequestNavigate ничего не происходит. Я также попытался инвертировать порядок, в котором регистрируются представления, поэтому представление B регистрируется первым, а представление B загружается, но RequestNavigate к A не работает.

Я добавил метод обратного вызова для исследования проблемы, например:

private void NavigateToEdit()
{
    this.regionManager.RequestNavigate(RegionNames.PrivateVehiclePopupRegion, EditUri,
        (NavigationResult nr) =>
        {
            var error = nr.Error;
            var result = nr.Result;
            // put a breakpoint here and checkout what NavigationResult contains
        });
}

Однако ошибка равна нулю, а результат - ложно... что ничего не говорит. Любые идеи? Я делал навигацию раньше, и она работает нормально, но я впервые реализую навигацию во всплывающем окне.


person chincheta73    schedule 05.01.2017    source источник
comment
Убедитесь, что вы используете один и тот же экземпляр RegionManager для регистрации представления и перехода к нему. Затем вы сможете перейти к представлению с помощью regionManager.RequestNavigate(PrivateVehiclePopupRegion, new Uri(typeof(PrivateVehiclePopupEditView).Name, UriKind.Relative), result =›{});   -  person mm8    schedule 05.01.2017
comment
Хороший вопрос @mm8 Как я могу проверить, использую ли я тот же экземпляр RegionManager? Это объект Prism, и я его не конструирую... (я думаю)   -  person chincheta73    schedule 05.01.2017
comment
Внедрите IRegionManager в класс вашего модуля и в ваши модели представления. На GitHub доступен пример приложения: github. .com/PrismLibrary/Prism-Samples-Wpf/tree/master/   -  person mm8    schedule 05.01.2017
comment
Вы должны вручную установить региональный менеджер, если ваше представление не находится внутри визуального дерева, чтобы региональный менеджер мог найти регион при навигации...   -  person Haukinger    schedule 05.01.2017
comment
Спасибо @Хаукингер. Это было!!! :D   -  person chincheta73    schedule 05.01.2017
comment
Это кажется слишком сложным. Почему бы просто не отключить/включить ввод формы, если вы просто собираетесь перейти от режима только для чтения к редактированию или обратно в том же всплывающем окне? Навигация для чего-то такого простого кажется излишним.   -  person R. Richards    schedule 05.01.2017
comment
Всегда приятно ... возможно, вы проголосуете за полезный ответ на другой вопрос ;-)   -  person Haukinger    schedule 05.01.2017