Miałem następujący problem dzisiaj i zastanawiałem się, czy istnieje rozwiązanie mojego problemu.Obsada do anonimowego typu
Moim pomysłem było stworzenie anonimowych klas i używać go jako źródło danych dla WinForm BindingSource:
public void Init()
{
var option1 = new
{
Id = TemplateAction.Update,
Option = "Update the Templates",
Description = "Bla bla 1."
};
var option2 = new
{
Id = TemplateAction.Download,
Option = "Download the Templates",
Description = "Bla bla 2."
};
var list = new[] {option1, option2}.ToList();
bsOptions.DataSource = list; // my BindingSource
// cboTemplates is a ComboBox
cboTemplates.DataSource = bsOptions;
cboTemplates.ValueMember = "Id";
cboTemplates.DisplayMember = "Option";
lblInfoTemplates.DataBindings.Add("Text", bsOptions, "Description");
}
który działa dobrze do tej pory.
Problem miałem jest, aby uzyskać identyfikator z „Current” własność BindingSource, bo nie może oddać go z powrotem do Anonymous Typ:
private void cmdOK_Click(object sender, EventArgs e)
{
var option = (???)bsOptions.Current;
}
Chyba nie ma sposobu, aby dowiedzieć się typu "Bieżąca" i uzyskać dostęp do właściwości "Id"? Może ktoś ma dobre rozwiązanie ...
Wiem, że istnieją inne (a także lepsze) sposoby na uzyskanie Id (odbicie, odczytanie wartości z ComboBox, nie używanie anonimowych tpyes, ...) m tylko courious, jeśli można uzyskać typ z bsOptions.Current w elegancki sposób.
Br ... anonimowy klasy mogą być przydatne (czasami), ale tak naprawdę, używane w ten sposób, dla mnie jest to regresja do VB wieku: /. –
Poczekaj, aż dynamiczne wejdzie na scenę, ciesz się, że widzimy tylko pytania o przekazywanie anonimowych obiektów. –
Dobra, przy odrobinie szczęścia będziemy mieli zupełnie nowy atrybut "markizy" na etykiecie: D –