Xamarin.forms 如何修复:OnNavigatedFrom(NavigationParameters)和#x27;:找不到可重写的合适方法
3个月的项目即将因此而报废 这完全没有道理。 我已经尝试过重新启动等。我有一个样本项目与相同版本的形式等工作。 我曾尝试将该项目中的AppMapViewModelBase引入我的项目,但错误仍然存在 有什么想法吗Xamarin.forms 如何修复:OnNavigatedFrom(NavigationParameters)和#x27;:找不到可重写的合适方法,xamarin.forms,Xamarin.forms,3个月的项目即将因此而报废 这完全没有道理。 我已经尝试过重新启动等。我有一个样本项目与相同版本的形式等工作。 我曾尝试将该项目中的AppMapViewModelBase引入我的项目,但错误仍然存在 有什么想法吗 using System; using System.ComponentModel; using Prism; using Prism.Commands; using Prism.Mvvm; using Prism.Navigation; using Xamarin.Essential
using System;
using System.ComponentModel;
using Prism;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Navigation;
using Xamarin.Essentials;
using Xamarin.Forms;
namespace bla.Infrastructure {
public abstract class AppMapViewModelBase : BindableBase, IInitialize, INavigationAware, IConfirmNavigation, IDestructible
{
private bool _isBusy;
public bool IsBusy
{
get => _isBusy;
set => SetProperty(ref _isBusy, value);
}
private int _cartItemCount;
public int CartItemCount
{
// get => _password;
get { return App.Current.CartItemCount; }
//set => SetProperty(ref _cartItemCount, value);
set
{
_cartItemCount = value;
App.Current.CartItemCount = value;
RaisePropertyChanged();
}
}
const string RootUriPrependText = "/";
DelegateCommand<string> _navigateAbsoluteCommand;
DelegateCommand<string> _navigateCommand;
DelegateCommand<string> _navigateModalCommand;
DelegateCommand<string> _navigateNonModalCommand;
private bool _isNotConnected;
public bool IsNotConnected
{
get
{
if (DesignMode.IsDesignModeEnabled)
{
return false;
}
else
{
return _isNotConnected;
}
}
set
{
SetProperty(ref _isNotConnected, value);
}
}
/// <summary>
/// Gets the navigate absolute command.
/// </summary>
/// <value>The navigate absolute command.</value>
public DelegateCommand<string> NavigateAbsoluteCommand => _navigateAbsoluteCommand ?? (_navigateAbsoluteCommand = new DelegateCommand<string>(NavigateAbsoluteCommandExecute, CanNavigateAbsoluteCommandExecute));
/// <summary>
/// Gets the navigate command.
/// </summary>
/// <value>The navigate command.</value>
public DelegateCommand<string> NavigateCommand => _navigateCommand ?? (_navigateCommand = new DelegateCommand<string>(NavigateCommandExecute, CanNavigateCommandExecute));
/// <summary>
/// Gets the navigate modal command.
/// </summary>
/// <value>The navigate modal command.</value>
public DelegateCommand<string> NavigateModalCommand => _navigateModalCommand ?? (_navigateModalCommand = new DelegateCommand<string>(NavigateModalCommandExecute, CanNavigateModalCommandExecute));
/// <summary>
/// Gets the navigate non modal command.
/// </summary>
/// <value>The navigate non modal command.</value>
public DelegateCommand<string> NavigateNonModalCommand => _navigateNonModalCommand ?? (_navigateNonModalCommand = new DelegateCommand<string>(NavigateNonModalCommandExecute, CanNavigateNonModalCommandExecute));
/// <summary>
/// Gets the navigation service.
/// </summary>
/// <value>The navigation service.</value>
protected INavigationService NavigationService { get; }
/// <summary>
/// Initializes a new instance of the <see cref="AppMapViewModelBase"/> class.
/// </summary>
/// <param name="navigationService">The navigation service.</param>
/// <exception cref="System.ArgumentNullException">navigationService</exception>
protected AppMapViewModelBase(INavigationService navigationService)
{
if (navigationService == null)
{
throw new ArgumentNullException(nameof(navigationService));
}
this.NavigationService = navigationService;
Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
IsNotConnected = Connectivity.NetworkAccess != NetworkAccess.Internet;
}
void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
{
if (e.NetworkAccess != NetworkAccess.Internet)
{
//NavigationService.NavigateAsync("NavigationPage/NoInternet");
}
IsNotConnected = e.NetworkAccess != NetworkAccess.Internet;
}
/// <summary>
/// Determines whether this instance accepts being navigated away from. This method is invoked by Prism before a navigation operation and is a member of IConfirmNavigation.
/// </summary>
/// <param name="parameters">The navigation parameters.</param>
/// <returns><c>True</c> if navigation can continue, <c>False</c> if navigation is not allowed to continue</returns>
public virtual bool CanNavigate(INavigationParameters parameters)
{
return true;
}
/// <summary>
/// Determines whether this instance can execute the NavigateAbsoluteCommand.
/// </summary>
/// <param name="uri">The uri.</param>
/// <returns><c>true</c> if this instance can execute NavigateAbsoluteCommand; otherwise, <c>false</c>.</returns>
protected virtual bool CanNavigateAbsoluteCommandExecute(string uri)
{
return !String.IsNullOrEmpty(uri);
}
/// <summary>
/// Determines whether this instance can execute the NavigateAbsoluteCommand.
/// </summary>
/// <param name="uri">The uri.</param>
/// <returns><c>true</c> if this instance can execute NavigateAbsoluteCommand; otherwise, <c>false</c>.</returns>
protected virtual bool CanNavigateCommandExecute(string uri)
{
return !String.IsNullOrEmpty(uri);
}
/// <summary>
/// Determines whether this instance can execute the NavigateModalCommand.
/// </summary>
/// <param name="uri">The uri.</param>
/// <returns><c>true</c> if this instance can execute NavigateModalCommand; otherwise, <c>false</c>.</returns>
protected virtual bool CanNavigateModalCommandExecute(string uri)
{
return !String.IsNullOrEmpty(uri);
}
/// <summary>
/// Determines whether this instance can execute the NavigateNonModalCommand.
/// </summary>
/// <param name="uri">The uri.</param>
/// <returns><c>true</c> if this instance can execute NavigateNonModalCommand; otherwise, <c>false</c>.</returns>
protected virtual bool CanNavigateNonModalCommandExecute(string uri)
{
return !String.IsNullOrEmpty(uri);
}
/// <summary>
/// <p>Invoked by Prism Navigation when the instance is removed from the navigation stack.</p>
/// <p>Deriving class can override and perform any required clean up.</p>
/// </summary>
public virtual void Destroy()
{
}
/// <summary>
/// Navigates to the uri after creating a new navigation root. (Effectively replacing the Application MainPage.)
/// </summary>
/// <param name="uri">The uri text.</param>
/// <returns>Task.</returns>
protected virtual async void NavigateAbsoluteCommandExecute(string uri)
{
if (!CanNavigateAbsoluteCommandExecute(uri))
{
return;
}
if (!uri.StartsWith(RootUriPrependText))
{
uri = string.Concat(RootUriPrependText, uri);
}
await this.NavigationService.NavigateAsync(uri, null, false,false);
}
/// <summary>
/// Navigates to the uri.
/// </summary>
/// <param name="uri">The uri text.</param>
/// <returns>Task.</returns>
protected virtual async void NavigateCommandExecute(string uri)
{
if (!CanNavigateCommandExecute(uri))
{
return;
}
await this.NavigationService.NavigateAsync(uri);
}
/// <summary>
/// Navigates to the uri using a Modal navigation.
/// </summary>
/// <param name="uri">The uri text.</param>
/// <returns>Task.</returns>
protected virtual async void NavigateModalCommandExecute(string uri)
{
if (!CanNavigateModalCommandExecute(uri))
{
return;
}
await this.NavigationService.NavigateAsync(uri,null, useModalNavigation: true,animated:false);
}
/// <summary>
/// Navigates to the uri using Non-Modal navigation.
/// </summary>
/// <param name="uri">The uri text.</param>
/// <returns>Task.</returns>
protected virtual async void NavigateNonModalCommandExecute(string uri)
{
if (!CanNavigateNonModalCommandExecute(uri))
{
return;
}
await this.NavigationService.NavigateAsync(uri,null, useModalNavigation: false,false);
}
/// <summary>
/// Invoked by Prism immediately after the ViewModel has been created.
/// </summary>
/// <param name="parameters">The parameters.</param>
public virtual void InitializeAsync(INavigationParameters parameters)
{
}
/// <summary>
/// Invoked by Prism after navigating away from viewmodel's page.
/// </summary>
/// <param name="parameters">The parameters.</param>
public virtual void OnNavigatedFrom(INavigationParameters parameters)
{
}
/// <summary>
/// Invoked by Prism after navigating to the viewmodel's page.
/// </summary>
/// <param name="parameters">The parameters.</param>
public virtual void OnNavigatedTo(INavigationParameters parameters)
{
}
public virtual void Initialize(INavigationParameters parameters)
{
}
}
}
使用系统;
使用系统组件模型;
使用棱镜;
使用Prism.命令;
使用Prism.Mvvm;
使用棱镜导航;
使用Xamarin.Essentials;
使用Xamarin.Forms;
命名空间bla.Infrastructure{
公共抽象类AppMapViewModelBase:BindableBase、IIInitialize、INavigationAware、IConfirmNavigation、IDestructible
{
私人厕所很忙;
公共图书馆很忙
{
get=>\你很忙;
set=>SetProperty(ref\u isBusy,value);
}
私有整数(cartItemCount);;
公共整数项计数
{
//获取=>\u密码;
获取{return App.Current.CartItemCount;}
//set=>SetProperty(ref\u cartItemCount,value);
设置
{
_cartItemCount=值;
App.Current.CartItemCount=值;
RaisePropertyChanged();
}
}
常量字符串RootUriPrependText=“/”;
DelegateCommand _navigateAbsoluteCommand;
DelegateCommand _navigateCommand;
DelegateCommand _navigateModalCommand;
DelegateCommand _navigateNonModalCommand;
私人楼宇未连接;
公共广播未连接
{
得到
{
如果(DesignMode.IsDesignModeEnabled)
{
返回false;
}
其他的
{
返回未连接;
}
}
设置
{
SetProperty(参考未连接,值);
}
}
///
///获取“绝对导航”命令。
///
///“绝对导航”命令。
public DelegateCommand NavigateAbsoluteCommand=>\u NavigateAbsoluteCommand???(\u NavigateAbsoluteCommand=new DelegateCommand(NavigateAbsoluteCommand执行,CanNavigateAbsoluteCommandExecute));
///
///获取导航命令。
///
///导航命令。
public DelegateCommand NavigateCommand=>_NavigateCommand??(_NavigateCommand=new DelegateCommand(NavigateCommandExecute,CanNavigateCommandExecute));
///
///获取导航模式命令。
///
///导航模式命令。
public DelegateCommand NavigateModalCommand=>_NavigateModalCommand??(_NavigateModalCommand=new DelegateCommand(NavigateModalCommandExecute,CanNavigateModalCommandExecute));
///
///获取导航非模式命令。
///
///导航非模态命令。
public DelegateCommand NavigateNonModalCommand=>_NavigateNonModalCommand??(_NavigateNonModalCommand=新DelegateCommand(NavigateNonModalCommandExecute,CanNavigateNonModalCommandExecute));
///
///获取导航服务。
///
///导航服务。
受保护的INavigationService导航服务{get;}
///
///初始化类的新实例。
///
///导航服务。
///导航服务
受保护的AppMapViewModelBase(INavigationService navigationService)
{
如果(导航服务==null)
{
抛出新ArgumentNullException(nameof(navigationService));
}
this.NavigationService=导航服务;
连接性.ConnectivityChanged+=连接性_ConnectivityChanged;
IsNotConnected=Connectivity.NetworkAccess!=NetworkAccess.Internet;
}
无效连接\u ConnectivityChanged(对象发送方,ConnectivityChangedEventArgs e)
{
if(例如NetworkAccess!=NetworkAccess.Internet)
{
//NavigationService.NavigationAsync(“NavigationPage/NoInternet”);
}
IsNotConnected=e.NetworkAccess!=NetworkAccess.Internet;
}
///
///确定此实例是否接受从中导航。此方法在导航操作之前由Prism调用,并且是IConfirmNavigation的成员。
///
///导航参数。
///如果导航可以继续,则为True;如果导航不允许继续,则为False
公共虚拟布尔CanNavigate(INavigationParameters)
{
返回true;
}
///
///确定此实例是否可以执行NavigateAbSolutionCommand。
///
///uri。
///如果此实例可以执行NavigateAbSolutionCommand,则为true;否则为false。
受保护的虚拟布尔CanNavigateAbsoluteCommandExecute(字符串uri)
{
return!String.IsNullOrEmpty(uri);
}
///
///确定此实例是否可以执行NavigateAbSolutionCommand。
///
///uri。
///如果此实例可以执行NavigateAbSolutionCommand,则为true;否则为false。
受保护的虚拟布尔CanNavigateCommandExecute(字符串uri)
{
return!String.IsNullOrEmpty(uri);
}
///
///确定此实例是否可以执行NavigateModalCommand。
///
///uri。
///如果此实例可以执行NavigateModalCommand,则为true;否则为false。
受保护的虚拟布尔CanNavigateModalCommandExecute(字符串uri)
{
return!String.IsNullOrEmpty(uri);
}
///
///确定此实例是否可以执行navigateNMODALL命令。
///
///uri。
///如果此实例可以执行NavigateNonModalCommand,则为true;否则为false。
受保护的虚拟布尔CanNavigateNonModalCommandExecute(字符串uri)
{
return!String.IsNullOrEmpty(uri);
}
///
///从导航堆栈中删除实例时,Prism Navigation将调用该实例
///派生类可以重写并执行任何所需的清理
///
公共虚拟空间销毁()
{
}
///
///导航到uri
public override void OnNavigatedFrom (INavigationParameters navigationParameters)
{
}