Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf prism-使用RequestNavigate时未调用IsNavigationTarget_Wpf_Prism_Prism 4 - Fatal编程技术网

Wpf prism-使用RequestNavigate时未调用IsNavigationTarget

Wpf prism-使用RequestNavigate时未调用IsNavigationTarget,wpf,prism,prism-4,Wpf,Prism,Prism 4,我正在努力学习棱镜导航支持。目前,我有一个棱柱区域,我想使用RegionManager.RequestNavigate()将视图加载到该区域。导航确实会发生,但不会调用INavigationAware的IsNavigationTarget(),即使导航目标视图的ViewModel实现了INavigationAware接口。这是我正在使用的代码 外壳: <StackPanel Margin="10"> <TextBlock Text="Main Window"/>

我正在努力学习棱镜导航支持。目前,我有一个棱柱区域,我想使用RegionManager.RequestNavigate()将视图加载到该区域。导航确实会发生,但不会调用INavigationAware的IsNavigationTarget(),即使导航目标视图的ViewModel实现了INavigationAware接口。这是我正在使用的代码

外壳:

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

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

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

为什么在导航完成之前没有调用IsNavigationTarget()?

我认为您的问题在于将视图导出为单例。修改VM和V,如下所示:

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

基本上,当您有现有实例时,
IsNavigationTarget
将被调用。但它不适用于新创建的实例

凯蒂,我认为你是对的。如果已经存在视图实例,则调用IsNavigationTarget()。这是第一次直接调用OnNavigatedTo(),而不调用isNavigationTarget()。那么,如果我们想第一次取消导航,我们该怎么做呢?谢谢。
[Export("RegionAView")]
public partial class RegionAView : UserControl {
    public RegionAView() {
        InitializeComponent();
    }
}
[Export("RegionAView")] 
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class RegionAView : UserControl 
{     
public RegionAView() 
{         
InitializeComponent();     
} 
}