Отображать конкретное поле содержимого списка в ComboBox (C#)

Ну, мой вопрос немного глупый, но я пробовал много разных вещей безрезультатно.

У меня есть ComboBox в моей основной форме, и я хочу указать его источник данных на общедоступный список List PriceChanges только для чтения, объявленный в классе Filters. С этим проблем нет, но я хочу указать поле «Описание».

Я безуспешно пытался присвоить строку «Описание» атрибуту DisplayMember. В моем ComboBox перечислены только: «BusinessLogic.PriceChange» для каждой записи, где BusinessLogic — это имя моего пространства имен, а PriceChange — класс.

Я ценю любую помощь.

С уважением

Это часть кода моей основной формы

    public mainFrm()
    {
        InitializeComponent();

        prodFilter = new Filters();
        cbPriceChanges.DataSource = prodFilter.PriceChanges;
        cbPriceChanges.DisplayMember = "Description"
    }

Это часть кода, объявляющего объект List.

public enum PriceChangeTypes
{
    No_Change,
    Increased,
    Decreased,
    All
}

public class PriceChange
{
    public String Description;
    public readonly PriceChangeTypes Type;

    public delegate bool ComparisonFuntionDelegate(Decimal a);
    public readonly ComparisonFuntionDelegate ComparisonFunction;

    public PriceChange(String Description, PriceChangeTypes type , ComparisonFuntionDelegate CompFunc)
    {
        this.Description = Description;
        Type = type;
        ComparisonFunction = CompFunc;
    }
}

public class Filters
{

    public readonly List<PriceChange> PriceChanges = null;

    public Filters()
    {
        PriceChanges = new List<PriceChange>();

        PriceChanges.Add(new PriceChange("No Change", PriceChangeTypes.No_Change, PriceChange => PriceChange == 0));
        PriceChanges.Add(new PriceChange("Increased", PriceChangeTypes.Increased, PriceChange => PriceChange > 0));
        PriceChanges.Add(new PriceChange("Decreased", PriceChangeTypes.Decreased, PriceChange => PriceChange < 0));
        PriceChanges.Add(new PriceChange("All", PriceChangeTypes.All, a => true));
    }
}

person Andres    schedule 30.08.2009    source источник
comment
Description, Type, ComparisonFuntionDelegate и ComparisonFunction действительно должны быть закрытыми или превращены в свойства.   -  person Robert Venables    schedule 30.08.2009


Ответы (2)


Вы пытались сделать «Описание» свойством? Это сильно изменится, если список попытается получить поле через отражение (что, скорее всего, и происходит).

public class PriceChange {
    public string Description{
        get;
        set;
    }
    // ...
}
person Paolo Tedesco    schedule 30.08.2009
comment
Отлично, вот и все, я думаю, мне нужно углубить свои навыки в том, как эта штука ведет себя внутри. Ура, приятель - person Andres; 30.08.2009

Попробуйте добавить это в свой класс:

public override string ToString()
        {
            return Description;
        }

В настоящее время вы просто получаете значение по умолчанию ToString, которое является пространством имен и классом объекта.

person MartW    schedule 30.08.2009