Вы не делаете ничего плохого. Согласно документация :
А энергозависимое поле не должно обычно передаваться с помощью касательно или параметр, так как это не будут рассматривать как энергозависимое в рамках функции. Существуют исключения к этому, такому, называя взаимно блокируемый API.
var choices = new Dictionary<string, string>();
choices["A"] = "Arthur";
choices["F"] = "Ford";
choices["T"] = "Trillian";
choices["Z"] = "Zaphod";
listBox1.DataSource = new BindingSource(choices, null);
listBox1.DisplayMember = "Value";
listBox1.ValueMember = "Key";
(Беспардонно взято из моего собственного блога: Привязать ComboBox к общему словарю .)
Это означает, что вы можете использовать SelectedValue, чтобы получить соответствующий ключ словаря для выбранного элемента в ListBox.
Я думаю, вы можете использовать для этого события. Каждый раз, когда что-то изменяется в ListBox, метод eventHandler будет добавлять / удалять то же самое из Dictionary.