ListBoxItem со значением?

Я хотел бы, чтобы вы спросили, возможно ли как-то указать в ListBoxItem строку, которая появится, и значение, которое будет храниться в БД. Это действительно возможно:

ItemSource={Binding MyEnumColleciton}

or

ItemSource={DynamicResource MyCollection}

и т.д..

но если вы представляете, что у меня около 100 ListBox. Я не хочу иметь так много разных перечислений и других коллекций ItemSource, я хочу записать их непосредственно в ListBoxItem.

Вот о чем я говорю:

<ListBox SelectedItem="{Binding Path=MyPath1}" Style="{StaticResource RadioButtonList}">
    <ListBoxItem Content="Text1" />
    <ListBoxItem Content="Text2" />
</ListBox>

<ListBox SelectedItem="{Binding Path=MyPath2}" Style="{StaticResource RadioButtonList}">
    <ListBoxItem Content="Text3" />
    <ListBoxItem Content="Text4" />
</ListBox>

<ListBox SelectedItem="{Binding Path=MyPath3}" Style="{StaticResource RadioButtonList}">
    <ListBoxItem Content="Text5" />
    <ListBoxItem Content="Text6" />
</ListBox>

... 100x

person PaN1C_Showt1Me    schedule 05.08.2010    source источник


Ответы (1)


Ну я придумал это:

public class ItemSourceProvider
    {
        public IEnumerable<ValueText<int>> GetValues(object o)
        {
            if (o == null) return null;

            switch (o.ToString().ToUpper())
            {
                case "PARAM":
                {
                    return new List<ValueText<int>>() 
                    {
                        new ValueText<int>{Value = 1, Text = "YES"},
                        new ValueText<int>{Value = 2, Text = "PARTIALLY"},
                        new ValueText<int>{Value = 3, Text = "NO"}
                    };
                }
                default: return null;
            }
        }
    }

    public class ValueText<T>
    {
        public string Text { get; set; }
        public T Value { get; set; }
    }

Добавьте DP в ресурсы элемента управления:

<ObjectDataProvider x:Key="testODP" MethodName="GetValues" ObjectType="{x:Type local:ItemSourceProvider}">
    <ObjectDataProvider.MethodParameters>PARAM</ObjectDataProvider.MethodParameters>                            
</ObjectDataProvider>

А потом:

<ListBox SelectedValue="{Binding Path=A}" SelectedValuePath="Value" Style="{StaticResource RadioButtonList}" DisplayMemberPath="Text" ItemsSource="{Binding Source={StaticResource testODP}}" />
person PaN1C_Showt1Me    schedule 05.08.2010
comment
Это не совсем то, что я хотел... но... Ваше мнение? - person PaN1C_Showt1Me; 05.08.2010