Xamarin.forms 表单激活/停用工具栏项不工作
我有一个Xamarin.FormMainPage:ContentPage,上面有一个工具栏项目栏。工具栏项绑定到我的ViewModel,如下所示:Xamarin.forms 表单激活/停用工具栏项不工作,xamarin.forms,Xamarin.forms,我有一个Xamarin.FormMainPage:ContentPage,上面有一个工具栏项目栏。工具栏项绑定到我的ViewModel,如下所示: <ToolbarItem Text="Sync" Command="{Binding ReloadCommand}" > </ToolbarItem> 在不同的设置页面上,有一个单独的对话框控制DeviceID和BuildingID。一旦输入了这些ID中的任何一个,它就会被持久地存储起来 App.SetPe
<ToolbarItem Text="Sync" Command="{Binding ReloadCommand}" >
</ToolbarItem>
在不同的设置页面上,有一个单独的对话框控制DeviceID和BuildingID。一旦输入了这些ID中的任何一个,它就会被持久地存储起来
App.SetPersistentSetting("DeviceID",value);
问题是,一旦我的代码使用popAsync()返回主页面,菜单项的外观就不会改变。我需要重新启动我的应用程序以查看更改。根据调试器,不会调用canReloadExecute为什么会这样?
我试图解决这个问题的方法是强制刷新主页的OnAppearing方法,如下所示:
public void RefreshToolbarItems()
{
TestApp.ViewModels.MainViewModel mvm = (TestApp.ViewModels.MainViewModel)BindingContext;
mvm.RefreshToolbarItems();
}
。。。在ViewModel中:
public void RefreshToolbarItems()
{
OnPropertyChanged("BuildingScanCommand");
OnPropertyChanged("ReloadCommand");
}
但是这段代码可以运行,但没有任何更改,尽管调试器显示例程确实在触发事件,但它们似乎没有任何作用
有什么办法让我的菜单继续吗
编辑1:“显示命令初始化”
我不是shre,你的具体意思是什么,但下面是处理该命令的全部代码:
private ICommand _reloadCommand;
public ICommand ReloadCommand => _reloadCommand ?? (_reloadCommand = new Command(ExecuteReloadCommand, canReloadExecute));
private bool _isReloading = false;
public bool IsReloading
{
get => _isReloading;
set
{
_isReloading = value;
((Command)_reloadCommand).ChangeCanExecute();
OnPropertyChanged(nameof(ReloadCommand));
}
}
private bool canReloadExecute(object arg)
{
bool result = (!IsReloading && (App.GetPersistentSetting("DeviceID") != "") && (App.GetPersistentSetting("BuildingID") != ""));
return result;
}
private async void ExecuteReloadCommand(object obj)
{
IsReloading = true;
// Some code ...
IsReloading = false;
}
如果命令处理程序已经运行,或者DeviceID和/或BuildingId的配置尚未完成,则目标是禁用该命令
启用/禁用几乎可以工作,如果我设置DeviceId和BuildingId并重新启动应用程序,则该命令已正确启用或禁用。但是,如果我在子页面中设置ID并返回到主页面,则它不起作用
同时,我得出结论,启动onPropertyChange显然不会使命令检查其canReloadExecute。所以问题是,我如何触发它?我最终自己解决了这个问题,这段代码对我来说很好:
public void RefreshToolbarItems()
{
((Command)BuildingScanCommand).ChangeCanExecute();
((Command)ReloadCommand).ChangeCanExecute();
}
显示
命令
初始化i附加编辑1。如果你还需要什么,请告诉我。
public void RefreshToolbarItems()
{
((Command)BuildingScanCommand).ChangeCanExecute();
((Command)ReloadCommand).ChangeCanExecute();
}