C#: Как привязать к ListBox DisplayMember и ValueMember результат из метода класса?
Я пытаюсь создать ListBox, где у меня будет пара ключ-значение. Те данные, которые я получил от класса, который предоставляет их от получателей.
Учебный класс:
public class myClass
{
private int key;
private string value;
public myClass() { }
public int GetKey()
{
return this.key;
}
public int GetValue()
{
return this.value;
}
}
Программа:
private List<myClass> myList;
public void Something()
{
myList = new myList<myClass>();
// code for fill myList
this.myListBox.DataSource = myList;
this.myListBox.DisplayMember = ??; // wanted something like myList.Items.GetValue()
this.myListBox.ValueMember = ??; // wanted something like myList.Items.GetKey()
this.myListBox.DataBind();
}
Это похоже на эту тему [ Невозможно сделать ключ-значение в списке в C# ], но мне нужно использовать класс, который возвращает значения из методов.
Можно ли сделать что-то простое, или мне лучше полностью переработать мой поток мыслей (и это решение)?
Спасибо за совет!
1 ответ
DisplayMember
а также ValueMember
свойства требуют имя (в виде строки) свойства, которое будет использоваться. Вы не можете использовать метод. Итак, у вас есть два варианта. Измените свой класс, чтобы он возвращал свойства, или создайте класс, производный от myClass, куда вы можете добавить два отсутствующих свойства
public class myClass2 : myClass
{
public myClass2() { }
public int MyKey
{
get{ return base.GetKey();}
set{ base.SetKey(value);}
}
public string MyValue
{
get{return base.GetValue();}
set{base.SetValue(value);}
}
}
Теперь, когда вы внесли эти изменения, вы можете изменить свой список с помощью нового класса (но исправить инициализацию)
// Here you declare a list of myClass elements
private List<myClass2> myList;
public void Something()
{
// Here you initialize a list of myClass elements
myList = new List<myClass2>();
// code for fill myList
myList.Add(new myClass2() {MyKey = 1, MyValue = "Test"});
myListBox.DataSource = myList;
myListBox.DisplayMember = "MyKey"; // Just set the correct name of the properties
myListBox.ValueMember = "MyValue";
this.myListBox.DataBind();
}