gpt4 book ai didi

c# - ListView 项目上的删除按钮

转载 作者:可可西里 更新时间:2023-11-01 10:34:35 25 4
gpt4 key购买 nike

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

我已经创建了:

enter image description here

<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>

我想更改 delItem 按钮的 visibility,但在 C# 中我无法使用 set Name 调用它。我该怎么做?

最佳答案

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

a) 添加一个名为 Visible 的新属性到你的类 Activity

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) 声明一个新类来将 bool 值转换为可见性

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) 最后更新您的绑定(bind)。不要忘记 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));
}
}
}
}

关于c# - ListView 项目上的删除按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34137085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com