【问题标题】:prism - IsNavigationTarget not invoked when using RequestNavigateprism - 使用 RequestNavigate 时未调用 IsNavigationTarget
【发布时间】:2013-07-04 04:16:53
【问题描述】:

我正在尝试学习 Prism Navigation 支持。目前,我有一个棱镜区域,我想使用 RegionManager.RequestNavigate() 将视图加载到该区域。导航确实发生了,但是不调用 INavigationAware 的 IsNavigationTarget(),即使 Navigation Target 视图的 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);
}

区域视图:

<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()?

【问题讨论】:

    标签: wpf prism prism-4


    【解决方案1】:

    我认为您的问题是您将视图导出为单例。修改VM和V如下:

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

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

    【讨论】:

    • katit,我认为你是对的。如果已经存在视图实例,则调用 IsNavigationTarget()。第一次直接调用 OnNavigatedTo() 而无需调用 IsNavigationTargert()。那么如果我们想第一次取消导航,我们该如何取消呢?非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2011-01-27
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    相关资源
    最近更新 更多