2009-10-30 3 views
0

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

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

Я хотел бы иметь 3 ComboBoxes, которые связываются с индивидуальными свойствами, перечисленными в этих 8 объектов, так ComboBoxes будет выглядеть «Начало1 , 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 для ListBoxinvestigating образца MultiBinding на MSDN here, как показано ниже, но получаю ошибку ниже:

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

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


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


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

ответ

2

Если вы просто пытаетесь отобразить строковое значение свойства, вы можете использовать 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> 
+0

Это именно то, что я искал. Большое вам спасибо - я использовал второй сложный сценарий, я углубится в ItemTemplates, чтобы понять, что происходит для будущей работы. Отличная работа! – CrimsonX

Смежные вопросы