C# 将ListView与对象集合关联

C# 将ListView与对象集合关联,c#,listview,dictionary,C#,Listview,Dictionary,如何使用ListView向用户显示一组对象,并管理这些对象?出于论证的目的,我们的设计目标是:我们有一个“怪物”对象,“怪物”将有几个“异能”。用户通过ListView项与异能进行交互 首先,我们创建一个Power对象。为对象指定以下方法: public ListViewItem makeKey() { return new ListViewItem(name); } 其中name是电源的名称,是一个字符串。此ListViewItem将作为一个键,允许我们稍后识别和检索此电源 接下来,

如何使用ListView向用户显示一组对象,并管理这些对象?

出于论证的目的,我们的设计目标是:我们有一个“怪物”对象,“怪物”将有几个“异能”。用户通过ListView项与异能进行交互

首先,我们创建一个Power对象。为对象指定以下方法:

public ListViewItem makeKey()
{
    return new ListViewItem(name);
}
其中name是电源的名称,是一个字符串。此ListViewItem将作为一个键,允许我们稍后识别和检索此电源

接下来,我们需要在怪物对象中添加一些地方来跟踪所有这些异能

public Dictionary<ListViewItem,Power> powers;
好的,差不多完成了!现在我们有了一本ListViewItems字典,它与怪物的力量有关。只需从字典中抓取键并将其粘贴到列表视图中:

foreach (ListViewItem key in powers.Keys)
    powerList.Items.Add(key);
其中powerList是我们要添加ListViewItems的ListView

好的,我们在ListView中找到了ListViewItems!现在,我们如何与他们互动?制作一个按钮,然后制作一个类似以下内容的函数:

private void powerRemoveButton_Click(object sender, EventArgs e)
{
    if (powerList.SelectedIndices.Count > 0)
    {
        int n = powerList.SelectedIndices[0];
        ListViewItem key = powerList.Items[n];
        monster.powers.Remove(key);
        powerList.Items.Remove(key);
    }
    else
    {
        MessageBox.Show("No power selected.");
    }
}

就这样。我希望这对你有所帮助。我不确定这是否是他们设计的一个故意的方面,但是当你使用ListViewItem作为一个键时,ListView和字典融合得如此之好,这是一种乐趣

说真的。。。你几乎同时发布了你自己问题的大部分答案。我认为这是一个方便的提示,有人建议如果我想分享提示,我可以发布并回答我自己的问题。我事先打好答案,然后在提交问题后贴上。
private void powerRemoveButton_Click(object sender, EventArgs e)
{
    if (powerList.SelectedIndices.Count > 0)
    {
        int n = powerList.SelectedIndices[0];
        ListViewItem key = powerList.Items[n];
        monster.powers.Remove(key);
        powerList.Items.Remove(key);
    }
    else
    {
        MessageBox.Show("No power selected.");
    }
}