ListView и перечисления - PullRequest
       7

ListView и перечисления

2 голосов
/ 13 апреля 2011

Мне часто приходится иметь дело со списками в пользовательском интерфейсе, которые переводят в значение enum в «ViewModel».Я знаю, что могу напрямую связать ListView.ItemSource с перечислением через ObjectDataProvider, который предоставляет имена элементов перечисления, но часто это не оптимально, потому что визуальное представление элемента списка должно отличаться от перечисленияимя элемента.

Кроме того, элементы из перечисления иногда необходимо пропустить в визуальном представлении списка.

так например:

    enum WhatIWantIsA        {
        NiceHouse,
        FastCar,
        Nothing // omitted in the view
    }

Следует перевести в список с элементами:

    A nice house
    A fast car

Итак, мой вопрос: как вы справляетесь со списками, чтоиметь заранее определенное количество записей и перевести в перечисление в ViewModel?

1 Ответ

3 голосов
/ 13 апреля 2011

Вы можете использовать IValueConverter на вашем переплете, чтобы перевести перечисление в читаемую форму:

public class MyEnumValueConverter : IValueConverter
{
    public object Convert(object value, Type type, ...)
    {
        var enumVal = (WhatIWantIsA)value;
        switch (enumVal)
        {
            case "NiceHouse": return "A nice house";
            case "FastCar": return "A fast car";
            default: return "Unknown Value"; //or throw exception    
        }
    }
    public object ConvertBack(object value, Type type, ...)
    {
        return value; //probably don't need to implement this
    }
}

Используйте это на вашем переплете:

<Resources>
    <local:MyEnumValueConverter x:Key="myEnumConverter"/>
</Resources>
<ListView ItemsSource="{Binding Converter={StaticResource myEnumConverter}}"/>

Таким образом, ваша ViewModel может продолжать работать с перечислением, и пользователь видит приличное значение.

Надеюсь, это поможет ...

Редактировать: обновлен пример использования Enum, представленный в вопросе: -)

...