【问题标题】:How do I properly Add and Remove SELECTED items from a listview如何正确添加和删除列表视图中的选定项目
【发布时间】:2017-11-09 23:55:50
【问题描述】:

所以我目前正在开发一个列表视图,它将在其中填充项目。在这种情况下,用户名。
我正在反序列化 json 以创建对象,我将获取对象和 NAME 属性并使用名称填充列表视图。 我已尝试将其设为可以删除所选项目
但无论我做什么以及如何做,它总是会抛出一个错误。 显然这应该很容易,所以我需要帮助了解如何以适当的方式做到这一点。

在当前状态下(参见下面的代码)没有错误,因为代码非常纤细。此时它甚至没有填充列表视图。我认为是数据绑定搞砸了。

这是我的 MainWindow.xaml 包含的内容。

<Grid>
        <ListView Name="theListview" HorizontalAlignment="Left" Height="236" Margin="10,10,0,0" VerticalAlignment="Top" Width="497">

            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
                </GridView>
            </ListView.View>
        </ListView>
        <Button Name="btnAdd" Click="btnAdd_Click" Content="Add" HorizontalAlignment="Left" Margin="61,276,0,0" VerticalAlignment="Top" Width="75"/>
        <Button Name="btnRemove" Click="btnRemove_Click" Content="Remove" HorizontalAlignment="Left" Margin="389,276,0,0" VerticalAlignment="Top" Width="75"/>
    </Grid>

这是我的 CS

using Newtonsoft.Json;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Windows;

namespace lvProject
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        string userdata;
        private ObservableCollection<Users> theUsers = new ObservableCollection<Users>();

        public MainWindow()
        {
            InitializeComponent();
        }

        private void PopulateListView()
        {
            using (StreamReader sr = new StreamReader("ops.json"))
            {
                userdata = sr.ReadToEnd();
                List<Users> accounts = JsonConvert.DeserializeObject<List<Users>>(userdata);
                foreach (var account in accounts)
                {
                    theUsers.Add(new Users { Name = account.Name });
                }
            }
        }

        private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            //I got the code done for this part, I wont include it because it will make this too long.
        }

        private void btnRemove_Click(object sender, RoutedEventArgs e)
        {
            //I want to remove the SELECTED item from the listview here.
        }
    }
}

JSON

[
  {
    "uuid": "a7c1987f-022c-4310-bd32-21614e7e37b8",
    "name": "Stefan",
    "created": "2017-11-09 21:54:40 +0100",
    "source": "Server",
    "expires": "forever",
    "reason": "Banned by an operator."
  },
  {
    "uuid": "98e99e7a-df48-4b8b-adc9-e65c32410247",
    "name": "Demauen",
    "created": "2017-11-09 20:44:35 +0100",
    "source": "Server",
    "expires": "forever",
    "reason": "Banned by an operator."
  },
  {
    "uuid": "d229d707-27ae-472b-b2df-205713a7c0e0",
    "name": "Kakor",
    "created": "2017-11-09 21:56:02 +0100",
    "source": "Server",
    "expires": "forever",
    "reason": "Banned by an operator."
  },
  {
    "uuid": "af4e2469-0988-4c42-97df-3301a167b658",
    "name": "STEFANOS",
    "created": "2017-11-09 22:26:14 +0100",
    "source": "Server",
    "expires": "forever",
    "reason": "Banned by an operator."
  },
  {
    "uuid": "12e343aa-2c18-45ad-a485-b37838eecd3d",
    "name": "charlies",
    "created": "2017-11-09 22:26:22 +0100",
    "source": "Server",
    "expires": "forever",
    "reason": "Banned by an operator."
  },
  {
    "uuid": "b87e1cbc-c67c-4026-a359-8652ad9de8b4",
    "name": "iVarga",
    "created": "2017-11-09 20:44:38 +0100",
    "source": "Server",
    "expires": "forever",
    "reason": "Banned by an operator."
  },
  {
    "uuid": "eb04608e-cadc-4970-aa57-c60c43fce352",
    "name": "steffe",
    "created": "2017-11-09 22:09:14 +0100",
    "source": "Server",
    "expires": "forever",
    "reason": "Banned by an operator."
  },
  {
    "uuid": "5f95fb35-a2aa-42ac-a99b-e88a013f51b9",
    "name": "Alan",
    "created": "2017-11-09 21:38:20 +0100",
    "source": "Server",
    "expires": "forever",
    "reason": "Banned by an operator."
  }
]

【问题讨论】:

    标签: c# .net json wpf listview


    【解决方案1】:

    这样的东西应该可以工作(你需要从ObservableCollection中删除它们):

    private void btnRemove_Click(object sender, RoutedEventArgs e)
    {
        List<Users> usersToRemove = new List<Users>();
    
        foreach (Users item in theListview.SelectedItems)
        {
            usersToRemove.Add(item);
        }
    
        foreach (Users userToRemove in usersToRemove)
        {
            theUsers.Remove(userToRemove);
        }
    }
    

    【讨论】:

      【解决方案2】:

      您需要在某处将ListViewItemsSource 设置为ObservableCollection

      然后您可以将 ListViewSelectedItem 转换为 Users 并将其从源集合中删除:

      public partial class MainWindow : Window
      {
          string userdata;
          private ObservableCollection<Users> theUsers = new ObservableCollection<Users>();
      
          public MainWindow()
          {
              InitializeComponent();
              theListview.ItemsSource = theListview;
          }
      
          private void PopulateListView()
          {
              using (StreamReader sr = new StreamReader("ops.json"))
              {
                  userdata = sr.ReadToEnd();
                  List<Users> accounts = JsonConvert.DeserializeObject<List<Users>>(userdata);
                  foreach (var account in accounts)
                  {
                      theUsers.Add(new Users { Name = account.Name });
                  }
              }
          }
      
          private void btnAdd_Click(object sender, RoutedEventArgs e)
          {
              //I got the code done for this part, I wont include it because it will make this too long.
          }
      
          private void btnRemove_Click(object sender, RoutedEventArgs e)
          {
              Users selectedUser = theListview.SelectedItem as Users;
              if (selectedUser != null)
                  theUsers.Remove(selectedUser);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-22
        • 2012-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多