Связывание ListView с коллекцией объектов - PullRequest
2 голосов
/ 19 сентября 2008

Как вы можете использовать ListView, чтобы показать пользователю коллекцию объектов и управлять этими объектами?

1 Ответ

7 голосов
/ 19 сентября 2008

В качестве аргумента, вот наша цель: у нас есть объект «монстр», и у этого «монстра» будет несколько «сил». Пользователь взаимодействует с полномочиями через элемент ListView.

Сначала мы создаем объект Power. Дайте объекту следующий метод:

public ListViewItem makeKey()
{
    return new ListViewItem(name);
}

где имя - это имя силы и строка. Этот ListViewItem будет служить ключом, позволяющим нам идентифицировать и извлечь эту мощность позже.

Далее нам нужно добавить где-нибудь в объекте Monster, чтобы отслеживать все эти способности.

public Dictionary<ListViewItem,Power> powers;

Так что теперь нам нужен способ добавить силы монстру.

public void addPower(Power newPower) {
    ListViewItem key = newPower.makeKey();
    monster.powers.add(key, newPower);
}

Хорошо, почти готово! Теперь у нас есть словарь ListViewItems, который связан с силами монстра. Просто возьмите ключи из этого словаря и вставьте их в ListView:

foreach (ListViewItem key in powers.Keys)
    powerList.Items.Add(key);

Где powerList - это ListView, к которому мы добавляем ListViewItems.

Хорошо, у нас есть ListViewItems в 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.");
    }
}

И это все. Я надеюсь, что вы нашли это полезным. Я не уверен, было ли это намеренным аспектом их дизайна, но ListViews и Словари так удивительно хорошо сочетаются друг с другом, когда вы используете ListViewItem в качестве ключа, что очень приятно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...