gpt4 book ai didi

wpf - prism - 使用 RequestNavigate 时未调用 IsNavigationTarget

转载 作者:行者123 更新时间:2023-12-04 08:02:26 28 4
gpt4 key购买 nike

我正在尝试学习 Prism Navigation 支持。目前,我有一个 Prism 区域,我想使用 RegionManager.RequestNavigate() 将 View 加载到该区域。导航确实发生了,但是不调用 INavigationAware 的 IsNavigationTarget(),即使 Navigation Target View 的 ViewModel 实现了 INavigationAware 接口(interface)。这是我正在使用的代码。

贝壳:

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

外壳 View 模型:
private void NavigateToA () {
Uri uri = new Uri("RegionAView", UriKind.Relative);
RegionManager.RequestNavigate("MainRegion", uri);
}

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

区域 View 模型
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()?

最佳答案

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

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

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

关于wpf - prism - 使用 RequestNavigate 时未调用 IsNavigationTarget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9833509/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com