ListView 项目上的删除按钮

2023-12-29

我开始为 UWP 进行开发。我正在尝试创建一个ListView填充有x:bind。现在我想在所有单个项目上创建一个按钮来删除它们。类似于 Windows 10 邮件:

我已经创建了:

<ListView x:Name="listActivity" ItemsSource="{x:Bind list}" Grid.Column="0" Header="Activity List" HorizontalAlignment="Center" Width="auto" IsItemClickEnabled="True" ItemClick="showDel">
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="vm:Activity">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="3*"/>
                    <ColumnDefinition Width="1*"/>
                </Grid.ColumnDefinitions>
                <TextBlock x:Name="txt" Text="{x:Bind name}" Grid.Column="0"/>
                <Button x:Name="delItem" Click="delActivity" Grid.Column="1" Visibility="Collapsed" Background="Transparent" Margin="100, 0, 0, 0">
                    <SymbolIcon Symbol="Delete"/>
                </Button>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

我想改变visibility of delItem按钮,但在 C# 中我无法使用设置的名称来调用它。我怎样才能做到这一点?


我建议使用绑定来执行此操作。

a) 向您的 Activity 类添加一个名为 Visible 的新属性

public class Activity : INotifyPropertyChanged
{
    public string Name { get; set; }

    private bool _visible; 
    public bool Visible {
        get { return _visible; }
        set
        {
            _visible = value;
            RaisePropertyChanged("Visible");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string name)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }
}

b) 还声明一个新类来将布尔值转换为可见性

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return (value is bool && (bool)value) ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return value is Visibility && (Visibility)value == Visibility.Visible;
    }
}

c) 最后更新您的绑定。不要忘记 OneWay 模式设置。

<Page.Resources>
    <local:BooleanToVisibilityConverter x:Key="VisibilityConverter"/>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ListView ItemsSource="{x:Bind Activities}">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="local:Activity">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="3*"/>
                        <ColumnDefinition Width="1*"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock x:Name="txt" Text="{x:Bind Name}" Grid.Column="0"/>
                    <Button x:Name="delItem" Click="delItem_Click" Grid.Column="1" Visibility="{x:Bind Visible, Mode=OneWay, Converter={StaticResource VisibilityConverter}}" Background="Transparent" Margin="100, 0, 0, 0">
                        <SymbolIcon Symbol="Delete"/>
                    </Button>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

您现在可以直接通过代码访问可见性或控件。完整代码如下,供参考。

using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

namespace App1
{
public sealed partial class MainPage : Page
{ 
    public List<Activity> Activities { get; set; }

    public MainPage()
    {
        this.InitializeComponent();

        Activities = new List<Activity>();
        Activities.Add(new Activity { Name = "Activity1", Visible = true });
        Activities.Add(new Activity { Name = "Activity2", Visible = false });
    }

    private void delItem_Click(object sender, RoutedEventArgs e)
    {
        Activities.First().Visible = false;
    }
}

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return (value is bool && (bool)value) ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return value is Visibility && (Visibility)value == Visibility.Visible;
    }
}

public class Activity : INotifyPropertyChanged
{
    public string Name { get; set; }

    private bool _visible; 
    public bool Visible {
        get { return _visible; }
        set
        {
            _visible = value;
            RaisePropertyChanged("Visible");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string name)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ListView 项目上的删除按钮 的相关文章

随机推荐

  • Redmine - Ruby - 寻找自定义字段的值

    我检查了 IRC 的 redmine 但无法获得帮助 我很矛盾 不知道该把这个问题放在 Superuser ServerFault 还是这里 但由于我的问题是面向技术编程的 所以我决定在这里寻求帮助 我们有一个 Mercurial 存储库系
  • 声明类型的 MethodInfo 相等性

    我需要检查两个 MethodInfo 之间的相等性 它们实际上是完全相同的 MethodInfo 除了 ReflectedType 即 DeclaringType 相同 并且方法实际上应该具有相同的主体 有很多方法可以做到这一点 但我正在寻
  • 权限设置为777,文件仍然不可写

    我已将文件权限设置为 777 但无法使用 PHP 写入该文件 我可以在我的 FTP 客户端中清楚地看到该文件具有 0777 权限 当我这样做时 echo true is writable file txt yes no 我得到 不 我也尝试
  • try/catch 块内的 Response.Redirect 异常

    比如说 我有一个 try catch 块 它封装了一大块代码 然后在其中的某个位置我需要这样调用 Response Redirect protected void ButtonGo Click object sender EventArgs
  • java泛型:获取具有泛型参数的类的类

    我很好奇如何进行这项工作 Class
  • R,dplyr:根据条件快速构建互补行列表的函数

    我有一个约 80 000 行 x 26 列的数据集 这些行对应于机器人搭建套件的 SKU 或唯一 ID 这些列对应 26 个不同的机器人部件 一个单元包含了对构建整个机器人的贡献的一部分 行比例的总和可能不会等于 1 0 因为拼搭套装并不总
  • Java (Android) 中的 List 是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 Type 叫什么 https stackoverflow com questions 1286005 what is typetype called List gt 在 java 泛型中意味着什么 h
  • 如何在 MATLAB 中将变量值放入文本字​​符串中?

    我正在尝试编写一个需要两个输入的简单函数 x and y 并将它们传递给其他三个简单的函数 对它们进行加 乘 除操作 然后 主函数应将结果显示为包含以下内容的字符串 x y 以及总数 我认为我对输出参数有些不理解 无论如何 这是我的 可怜的
  • 类存在多个定义

    我正在使用 Kohana 框架 它允许多个类定义 在应用程序和系统子文件夹中 我使用 phpstorm 作为 IDE 它会向我发送消息multiple definitions exist for class 有没有办法告诉 phpStorm
  • 在android中的共享首选项中禁用对话框通知

    我在有铃声的应用程序中有共享偏好 我想禁用通知短信和彩信以及来自应用程序的通知 例如警报通知
  • sql中*是什么意思?

    例如 我知道什么SELECT FROM example table 方法 然而 不知道代码的每一部分的含义 我感到不舒服 SQL 查询的第二部分是您要为所获取的每条记录检索的列的名称 显然 您可以为每个记录检索多个列 并且 仅当您想检索al
  • AngularJS 对许多输入进行数据绑定的方式是什么?

    我正在学习 angularjs 我希望能够让用户输入许多输入 当这些输入被输入list数组元素应该相应改变 我想尝试使用 ngRepeat 指令 但我读到 因为它创建了一个新范围 所以我无法进行数据绑定 div div
  • 如何获取backgroundSession NSURLSessionUploadTask响应

    我已经实现了一个在后台运行的 NSURLSession 因此即使应用程序暂停 它也可以使用系统守护进程继续执行任务 问题是 void URLSession NSURLSession session dataTask NSURLSession
  • 如何以编程方式启用 LAN 唤醒

    有没有办法以编程方式进入 BIOS 并为支持 LAN 唤醒功能的计算机打开该功能 理想情况下 解决方案应该是跨 BIOS 的 但使用单独的解决方案来打击每个主要供应商也是可以的 BIOS 配置是操作系统有意限制的内容 以避免病毒问题 以前有
  • 通过外部“C”链接解决重载问题

    在混合 C C 项目中 我们需要从 C 调用 C 函数 要调用的函数被重载为三个单独的函数 但我们可以从 C 端忽略这一点 我们只需选择最合适的一个并坚持使用该函数 有两种方法可以做到这一点 1 编写一个带有 extern C 函数的小型
  • 升级到 2.4.0 后,Spring Cloud 配置客户端无法从配置服务器获取/加载配置文件

    弹簧云配置客户端无法从中读取配置文件弹簧云配置服务器升级到后2 4 0使用 spring cloud 版本2020 0 0 M6 从 spring boot 2 4 0 版本开始 默认不启用 bootstrapping 需要在你的应用程序中
  • 在 Mac 10.9.2 上安装 WordNet

    我正在尝试在 Mac 操作系统 10 9 2 上安装 WordNet 我尝试过以下方法 配置 make 但期间make我遇到了一些错误 然后我安装了XQuartz 2 7 5 我仍然遇到一些错误make 接下来 我安装了 Xcode 但这仍
  • VHDL-读取HEX文件

    In VHDL 从 HEX 文件初始化 std logic vector 数组 https stackoverflow com questions 20164216 vhdl init std logic vector array from
  • 为什么我们不应该在java中使用受保护的静态

    我正在经历这个问题Java中有没有办法覆盖类变量 https stackoverflow com questions 685300 is there a way to override class variables in java 首先c
  • ListView 项目上的删除按钮

    我开始为 UWP 进行开发 我正在尝试创建一个ListView填充有x bind 现在我想在所有单个项目上创建一个按钮来删除它们 类似于 Windows 10 邮件 我已经创建了