призма - IsNavigationTarget не вызывается при использовании RequestNavigate - PullRequest
4 голосов
/ 23 марта 2012

Я пытаюсь заручиться поддержкой Prism Navigation. В настоящее время у меня есть призма Region, и я хочу загрузить вид в этот регион с помощью RegionManager.RequestNavigate (). Навигация происходит, однако IsNavigationTarget () из INavigationAware не вызывается, даже если ViewModel представления «Цель навигации» реализует интерфейс INavigationAware. Вот код, который я использую.

Корпус:

<StackPanel Margin="10">
    <TextBlock Text="Main Window"/>
    <Button Content="RegionA" Command="{Binding NavigateToACommand}" />
    <ContentControl prism:RegionManager.RegionName="MainRegion"/>
</StackPanel>

ShellViewModel:

private void NavigateToA () {
    Uri uri = new Uri("RegionAView", UriKind.Relative);
    RegionManager.RequestNavigate("MainRegion", uri);
}

RegionAView:

<UserControl x:Class="NavigationExample.RegionAView"
    <Grid>
        <TextBlock Text="This is Region A"/>
    </Grid>
</UserControl>

RegionAViewModel

public class RegionAViewModel : INavigationAware{

    public RegionAViewModel() {
    }

    public bool IsNavigationTarget(NavigationContext navigationContext) {
        return false; //Not Invoked
    }

    public void OnNavigatedTo(NavigationContext navigationContext) {
        //Gets Invoked
    }
}

RegionAView.xaml.cs

[Export("RegionAView")]
public partial class RegionAView : UserControl {
    public RegionAView() {
        InitializeComponent();
    }
}

Почему IsNavigationTarget () не вызывается до завершения навигации?

1 Ответ

2 голосов
/ 23 марта 2012

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

[Export("RegionAView")] 
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class RegionAView : UserControl 
{     
public RegionAView() 
{         
InitializeComponent();     
} 
} 

Как правило, IsNavigationTarget будет вызываться, когда у вас есть существующие экземпляры. Но это не будет работать для вновь созданного экземпляра.

...