DataSource DisplayMember с пользовательской строкой, состоящей из свойств DataSource - PullRequest
1 голос
/ 18 февраля 2020

Возможно ли привязать ListBox к источнику данных List<A>, при этом для DisplayMember задается пользовательская строка, состоящая из свойств A, таких как следующие $"{A.b} {A.c}"?

var list1 = new List<A>();
// populate list
MyListBox.DisplayMember = $"{A.b} {A.c}"; // not going to work
MyListBox.DataSource = list1;

Я знаю Я могу использовать анонимный тип, но я хочу, чтобы ListBox.Items оставался типа A. Я не хочу делать следующее:

var list2 = (from a in list1
             select new {A = a, DisplayMember = $"{a.b} {a.c}"}).ToList();
MyListBox.DisplayMember = "DisplayMember";
MyListBox.DataSource = list2;

, потому что теперь MyListBox.Items является анонимным, а A может ' не может быть извлечено как var list = MyListBox.Items.OfType<A>().

Итак, есть ли способ сделать это?

1 Ответ

1 голос
/ 18 февраля 2020

Я думал об этом неправильно. Решил это сейчас. Возможно, это было очевидно для некоторых, но я собираюсь опубликовать свой ответ для потомков.

Используйте анонимный тип во втором примере и просто установите ValueMember на A

var list2 = (from a in list1
             select new {A = a, DisplayMember = $"{a.b} {a.c}"}).ToList();
MyListBox.DisplayMember = "DisplayMember";
MyListBox.ValueMember = "A";
MyListBox.DataSource = list2;

var list3 = MyListBox.Items.OfType<A>().ToList(); // works!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...