You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:40:30