首页 > 解决方案 > 如何使用 ListViewItem 中的按钮从 ListView 中删除对象?

问题描述

用户界面

在 中写入文本,inputTitle TextBox然后按添加按钮将项目添加到TaskList ListView.

   public MainWindow()
    {
        InitializeComponent();

        DataContext = new AddItem();
        newItems = new ObservableCollection<AddItem> { };
        taskList.ItemsSource = newItems;

    }

    private void addButton_Click(object sender, RoutedEventArgs e)
    {
        var newItem = new AddItem()
        {
            Title = inputTitle.Text,
        };

        newItems.Add(newItem);
        taskList.SelectedItem = newItem;
    }

    private void deleteButton_Click(object sender, RoutedEventArgs e)
    {
    }

它是TaskList通过按添加按钮添加项目,我想通过按删除按钮删除

<Canvas Margin="0,0,0,10">
    <Canvas Height="81" Canvas.Left="10" Canvas.Top="17" Width="380">
        <TextBlock x:Name="textBlock" Text="TaskTitle" TextWrapping="Wrap" Height="24" Width="380" FontSize="20" IsEnabled="False"/>
        <TextBox x:Name="inputTitle" Text="{Binding Title, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" TextWrapping="Wrap" Width="320" FontSize="24" Canvas.Top="27" Height="44" TabIndex="1" Canvas.Left="4" Margin="2,2,2,2"/>
        <Button x:Name="addButton" Content="Add" Canvas.Left="333" Canvas.Top="32" Height="34" Width="34" Click="addButton_Click" IsEnabled="{Binding CanAdd, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
    </Canvas>
    <ListView x:Name="taskList" Height="500" Width="400" Canvas.Top="116">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox >
                        <CheckBox.LayoutTransform>
                            <ScaleTransform ScaleX="2.5" ScaleY="2.5"/>
                        </CheckBox.LayoutTransform>
                    </CheckBox>
                    <TextBlock Text="{Binding Title}" FontSize="30" Width="290"/>
                    <Button x:Name="deleteButton" Content="Del" Height="34" Width="34" Click="deleteButton_Click"/>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Canvas>

标签: c#wpf

解决方案


您可以将 的Tag属性绑定Button到当前项。

<ListView x:Name="taskList" Height="500" Width="400" Canvas.Top="116" ItemsSource="{Binding newItems}">
   <ListView.ItemTemplate>
      <DataTemplate>
         <StackPanel Orientation="Horizontal">
            <CheckBox >
               <CheckBox.LayoutTransform>
                  <ScaleTransform ScaleX="2.5" ScaleY="2.5"/>
               </CheckBox.LayoutTransform>
            </CheckBox>
            <TextBlock Text="{Binding Title}" FontSize="30" Width="290"/>
            <Button x:Name="deleteButton" Content="Del" Height="34" Width="34" Click="deleteButton_Click" Tag="{Binding}"/>
         </StackPanel>
      </DataTemplate>
   </ListView.ItemTemplate>
</ListView>

当您将Tag属性绑定到当前项目时,您可以使用它从集合中删除它。

private void ButtonBase_OnClickDel(object sender, RoutedEventArgs e)
{
var button = (Button)sender;
var item = (AddItem)button.Tag;

newItems.Remove(item);
}

推荐阅读