MAUI应用中无IsVisible属性,如何隐藏ToolbarItem?
在MAUI中隐藏ToolbarItem的几种实用方法
MAUI的ToolbarItem本身没有IsVisible属性,要实现显示隐藏,核心思路是操作ToolbarItems集合,以下是几种常用方案:
方案一:ViewModel绑定动态集合
将ToolbarItems绑定到ViewModel中的ObservableCollection<ToolbarItem>,通过添加/移除集合元素控制显示状态:
XAML代码
<ContentPage.ToolbarItems> <Binding Path="ToolbarItemsCollection" /> </ContentPage.ToolbarItems>
ViewModel代码
public ObservableCollection<ToolbarItem> ToolbarItemsCollection { get; set; } public ICommand UpdateCommand { get; set; } public YourViewModel() { UpdateCommand = new Command(ExecuteUpdate); ToolbarItemsCollection = new ObservableCollection<ToolbarItem>(); // 初始化添加Update按钮 AddUpdateToolbarItem(); } // 添加Update按钮 private void AddUpdateToolbarItem() { if (!ToolbarItemsCollection.Any(t => t.Text == "Update")) { var updateItem = new ToolbarItem { Text = "Update", Command = UpdateCommand }; ToolbarItemsCollection.Add(updateItem); } } // 隐藏Update按钮 private void RemoveUpdateToolbarItem() { var updateItem = ToolbarItemsCollection.FirstOrDefault(t => t.Text == "Update"); if (updateItem != null) { ToolbarItemsCollection.Remove(updateItem); } } private void ExecuteUpdate() { // 你的Update业务逻辑 }
需要隐藏时调用RemoveUpdateToolbarItem,显示时调用AddUpdateToolbarItem即可。
方案二:自定义附加属性
创建一个附加属性IsVisible,绑定ViewModel的布尔值,自动处理集合的添加/移除操作:
附加属性类代码
public static class ToolbarItemVisibility { public static readonly BindableProperty IsVisibleProperty = BindableProperty.CreateAttached( "IsVisible", typeof(bool), typeof(ToolbarItemVisibility), true, propertyChanged: OnIsVisibleChanged); public static bool GetIsVisible(BindableObject view) { return (bool)view.GetValue(IsVisibleProperty); } public static void SetIsVisible(BindableObject view, bool value) { view.SetValue(IsVisibleProperty, value); } private static void OnIsVisibleChanged(BindableObject bindable, object oldValue, object newValue) { if (bindable is not ToolbarItem item || item.Parent is not ContentPage page) return; bool isVisible = (bool)newValue; if (isVisible && !page.ToolbarItems.Contains(item)) { page.ToolbarItems.Add(item); } else if (!isVisible && page.ToolbarItems.Contains(item)) { page.ToolbarItems.Remove(item); } } }
XAML代码
先引入命名空间(假设附加属性在YourApp.Utils下):
xmlns:utils="clr-namespace:YourApp.Utils"
给ToolbarItem添加附加属性绑定:
<ContentPage.ToolbarItems> <ToolbarItem x:Name="ToolBarItemUpdate" Command="{Binding UpdateCommand}" Text="Update" utils:ToolbarItemVisibility.IsVisible="{Binding IsUpdateButtonVisible}" /> </ContentPage.ToolbarItems>
ViewModel代码
private bool _isUpdateButtonVisible = true; public bool IsUpdateButtonVisible { get => _isUpdateButtonVisible; set => SetProperty(ref _isUpdateButtonVisible, value); // 需实现INotifyPropertyChanged接口 }
之后只需修改IsUpdateButtonVisible的值,按钮就会自动显示或隐藏。
方案三:后台代码直接操作集合
如果不需要MVVM绑定,可直接在页面后台代码中操作ToolbarItems集合:
// 隐藏Update按钮 var updateItem = ToolbarItems.FirstOrDefault(t => t.Text == "Update"); if (updateItem != null) { ToolbarItems.Remove(updateItem); } // 显示Update按钮 if (!ToolbarItems.Any(t => t.Text == "Update")) { ToolbarItems.Add(new ToolbarItem { Text = "Update", Command = (BindingContext as YourViewModel)?.UpdateCommand }); }
内容的提问来源于stack exchange,提问作者PEK
相关产品推荐
相关产品推荐

