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