C# 如何从listview中正确添加和删除所选项目

C# 如何从listview中正确添加和删除所选项目,c#,.net,json,wpf,listview,C#,.net,Json,Wpf,Listview,因此,我目前正在开发一个listview,其中将填充项目。在本例中为用户名。 我正在反序列化json以创建对象,我将获取对象和NAME属性,并用名称填充listview。 我已尝试将其移动到可以删除所选项目的位置 但不管我做什么,怎么做,它总是以抛出一个错误而告终。 显然,这应该是非常容易的,所以我需要帮助了解如何在一个道具的方式做这件事 在当前状态下(请参阅下面的代码),没有错误,因为代码太细了。此时它甚至没有填充listview。我想是数据绑定搞砸了 这就是我的MainWindow.xaml

因此,我目前正在开发一个listview,其中将填充项目。在本例中为用户名。
我正在反序列化json以创建对象,我将获取对象和NAME属性,并用名称填充listview。 我已尝试将其移动到可以删除所选项目的位置
但不管我做什么,怎么做,它总是以抛出一个错误而告终。 显然,这应该是非常容易的,所以我需要帮助了解如何在一个道具的方式做这件事

在当前状态下(请参阅下面的代码),没有错误,因为代码太细了。此时它甚至没有填充listview。我想是数据绑定搞砸了

这就是我的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>

类似的方法应该可以工作(您需要将它们从
可观测集合中删除)

private void btnRemove\u单击(对象发送者,路由目标)
{
List usersToRemove=new List();
foreach(列表视图中的用户项。选择编辑项)
{
usersToRemove.Add(项);
}
foreach(用户usersToRemove中的用户userToRemove)
{
删除(userToRemove);
}
}

您需要将
列表视图
项目资源
设置为
可观察集合
的某个位置

然后,您可以将
列表视图的
SelectedItem
强制转换为
用户
,并将其从源集合中删除:

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);
    }
}
公共部分类主窗口:窗口
{
字符串用户数据;
private ObservableCollection theUsers=新的ObservableCollection();
公共主窗口()
{
初始化组件();
theListview.ItemsSource=ListView;
}
私有void PopulateListView()
{
使用(StreamReader sr=newstreamreader(“ops.json”))
{
userdata=sr.ReadToEnd();
List accounts=JsonConvert.DeserializeObject(userdata);
foreach(账户中的var账户)
{
添加(新用户{Name=account.Name});
}
}
}
私有无效btnAdd_单击(对象发送者,路由目标e)
{
//我已经完成了这部分的代码,我不会包括它,因为它会使这太长。
}
私有void btnRemove_单击(对象发送者,路由目标)
{
Users selectedUser=ListView.SelectedItem作为用户;
如果(selectedUser!=null)
用户。删除(选择用户);
}
}
[
  {
    "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."
  }
]
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);
    }
}
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);
    }
}