Привязка отображаемого значения свойств коллекции к ComboBox - PullRequest
0 голосов
/ 30 октября 2009

Позвольте мне сначала описать мою цель: я создал объект с 3 свойствами: начало, конец и время. Я создал ObservableCollection из 8 из этих свойств, поэтому он выглядит так:

//C#
internal class MyObjects : ObservableCollection<MyObjectSetting>
        {
            public MyObjects()
                : base()
            {
                Add(new MyObjectSetting(
                            start1,
                            end1,
                            time1);
                Add(new MyObjectSetting(
                            start2,
                            end2,
                            time2);
    (etc)
            }
        }

Я хотел бы иметь 3 ComboBox, которые привязываются к отдельным свойствам, перечисленным в этих 8 объектах, поэтому ComboBoxes будет выглядеть как "start1, start2, ... start8", "end1, end2, ... end8".

Следующий код успешно связывает ComboBox с самими объектами, но я зашел в тупик относительно того, как получить доступ к отдельным свойствам каждого из комбинированных списков.

// WPF
    <Grid>
        <Grid.Resources>
            <local:MyObjects x:Key="myMyObjects"/>
        </Grid.Resources>

        <ComboBox x:Name="cbxStartPosition" 
                  Grid.Row="0" 
                  Grid.Column="3" 
                  ItemsSource="{Binding Source={StaticResource myMyObjects}}"                  
                  >
    </Grid>

Может кто-нибудь помочь мне определить, как привязать свойства объектов, хранящихся в коллекции, к отображаемому значению, отображаемому в ComboBox?

Я попытался добавить DataTemplate для ListBox, исследуя образец MultiBinding на MSDN здесь , как показано ниже, но получаю ошибку ниже:

//WPF
        <DataTemplate x:Key="StartPositionTemplate">
            <ListBox>
                <MultiBinding Converter="{StaticResource myNameConverter}">
                    <Binding Path="FirstName"/>
                    <Binding Path="LastName"/>
                </MultiBinding>
            </ListBoxItem>
        </DataTemplate>

Ошибка 32 Невозможно добавить значение типа «DataTemplate» в коллекцию или словарь типа «UIElementCollection».


Эта ошибка была вызвана тем, что my не было в разделе XAML. HTH люди в будущем. Использование DataTemplate было способом, согласно ответу ниже.


Если DataTemplate не годится, знает ли кто-нибудь, что может быть лучше для этого?

1 Ответ

2 голосов
/ 30 октября 2009

Если вы просто пытаетесь отобразить строковое значение свойства, вы можете использовать DisplayMemberPath:

<ComboBox ItemsSource="{Binding Source={StaticResource myMyObjects}}" DisplayMemberPath="Start"/>

Для более сложных сценариев вы можете использовать пользовательский шаблон элемента:

<ComboBox ItemsSource="{Binding Source={StaticResource myMyObjects}}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Start}"/>
                <TextBlock Text="{Binding End}"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...