根据列表视图选择的项目从列表中删除项目

Remove item from list based on listview selected item

我知道这听起来有点基础,但我卡住了,我不确定如何继续。

这是主要的 Class:

public sealed partial class MainPage : Page
        {
            private ObservableCollection<MyClass> MyList = new ObservableCollection<MyClass>(); 

            private void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
            {
                 MyList.Add(new MyClass("Hello", "World"));
                 MyListview.Items.Add(new MyClass("Hello", "World"));
            }

            private void Delete_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
            {
                MyList.Remove((MyClass)MyListview.SelectedItem);
            }
        }

我有一个列表名称 MyList 和一个列表视图名称 MyListview。我想要的是,当我按下一个按钮时,从 MyList 项目中删除 MyListview 的选定项目。所以像这样:

MyList.Remove((MyClass)MyListview.SelectedItem);

但出于某种原因,这对我不起作用。这样就不会删除任何内容。

我主页的XAML:

<Page
    x:Class="App17.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App17"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Button x:Name="Delete" Content="Delete" HorizontalAlignment="Left" Height="116" Margin="140,89,0,0" VerticalAlignment="Top" Width="224" Click="Delete_Click"/>
        <Button Content="Button" HorizontalAlignment="Left" Height="116" Margin="442,89,0,0" VerticalAlignment="Top" Width="214" Click="Button_Click"/>
        <ListView x:Name="MyListview" HorizontalAlignment="Left" Height="497" Margin="143,261,0,0" VerticalAlignment="Top" Width="510"/>

    </Grid>
</Page>

而我的 class MyClass 是:

class MyClass 
{ 
    public string Title { get; set; } 
    public string Name { get; set; } 

    public MyClass(string title,string name) 
    { 
        Title = title; 
        Name = name; 
    } 
}

我在确保我真的在测试您真正需要帮助的代码时遇到了一些麻烦。但我想我已经看得够多了,可以理解你遇到的问题是什么。

具体来说:您在显示项目的 ListView 和存储项目的私人 MyList collection 之间没有任何联系。

在 XAML-based 应用程序中,重点是通过绑定将您的数据连接到可视化表示。 ObservableCollection<T> 存在的一个主要原因是为了促进这一点,允许 collection-based 视觉效果对 collection 中的变化做出反应。

在您的示例中,您应该进行以下更改...

更改 MainPage 使其构造函数和 Button_Click() 方法如下所示:

public MainPage()
{
    this.InitializeComponent();

    DataContext = MyList;
}

private ObservableCollection<MyClass> MyList = new ObservableCollection<MyClass>();

private void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
    MyList.Add(new MyClass("Hello", "World"));
}

以上删除了对 MyListview.Items.Add() 的无关调用(当数据正确绑定时不需要)并将您的 MyList collection 分配为页面的 DataContext , 使其可用于绑定目的。

然后更改 XAML,使 ListView 声明如下所示:

<ListView x:Name="MyListview"
          HorizontalAlignment="Left" VerticalAlignment="Top"
          Height="497" Width="510"
          Margin="143,261,0,0"
          ItemsSource="{Binding}"/>

这里的关键是 ItemsSource 属性。使用空 Binding,控件将使用当前数据上下文,此处将从页面 object 继承,您在代码中将其设置为 MyList.

这样,您只需要对MyList本身进行操作,视觉表现会自动更新。