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

.NET MAUI中如何为集合/列表视图内的XAML元素设置名称?

单标签点击隐藏的基础实现

下面是单个标签点击后隐藏的实现代码:

XAML代码

<Label Text="This is a text."
       IsVisible="true"
       x:Name="textLabel">
    <Label.GestureRecognizers>
        <TapGestureRecognizer
            Tapped="LabelTapped"></TapGestureRecognizer>
    </Label.GestureRecognizers>
</Label>

后台代码

private void LabelTapped(object sender, TappedEventArgs e)
{
    textLabel.IsVisible = false;
}

点击该标签后,它会隐藏,这个实现简单直接。


CollectionView中标签点击隐藏的实现

当标签位于CollectionView中时,无法使用x:Name属性(要求名称唯一),可以通过以下两种方式实现相同效果:

方法1:直接通过sender获取当前标签

修改后台点击事件方法,从触发事件的sender对象直接获取对应的Label控件,再修改其显示状态:

后台代码

private void LabelTapped(object sender, TappedEventArgs e)
{
    if (sender is Label tappedLabel)
    {
        tappedLabel.IsVisible = false;
    }
}

CollectionView的XAML示例

<CollectionView ItemsSource="{Binding YourItemList}">
    <CollectionView.ItemTemplate>
        <DataTemplate>
            <Label Text="{Binding ItemText}"
                   IsVisible="true">
                <Label.GestureRecognizers>
                    <TapGestureRecognizer Tapped="LabelTapped" />
                </Label.GestureRecognizers>
            </Label>
        </DataTemplate>
    </CollectionView.ItemTemplate>
</CollectionView>

方法2:使用MVVM绑定属性(推荐)

更符合MVVM架构的方式是给集合中的每个数据项添加IsVisible属性,通过绑定控制标签显示状态:

数据项模型

public class YourItem : INotifyPropertyChanged
{
    private string _itemText;
    public string ItemText
    {
        get => _itemText;
        set
        {
            _itemText = value;
            OnPropertyChanged();
        }
    }

    private bool _isVisible = true;
    public bool IsVisible
    {
        get => _isVisible;
        set
        {
            _isVisible = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

ViewModel中的命令

public class YourViewModel
{
    public ObservableCollection<YourItem> YourItemList { get; set; }

    public ICommand HideLabelCommand { get; }

    public YourViewModel()
    {
        YourItemList = new ObservableCollection<YourItem>
        {
            new YourItem { ItemText = "Item 1" },
            new YourItem { ItemText = "Item 2" }
        };

        HideLabelCommand = new Command<YourItem>(item =>
        {
            item.IsVisible = false;
        });
    }
}

CollectionView的XAML绑定

<CollectionView ItemsSource="{Binding YourItemList}">
    <CollectionView.ItemTemplate>
        <DataTemplate>
            <Label Text="{Binding ItemText}"
                   IsVisible="{Binding IsVisible}">
                <Label.GestureRecognizers>
                    <TapGestureRecognizer Command="{Binding BindingContext.HideLabelCommand, Source={x:Reference Name=YourPageName}}"
                                          CommandParameter="{Binding .}" />
                </Label.GestureRecognizers>
            </Label>
        </DataTemplate>
    </CollectionView.ItemTemplate>
</CollectionView>

注:需将XAML页面的x:Name设置为YourPageName,或根据实际页面名称调整。


内容的提问来源于stack exchange,提问作者eengstroem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:15:13