2009-10-30 203 views
0

让我先描述我的目标:我创建了一个具有3个属性的对象:开始,结束和时间。我创建的这些特性的8一个ObservableCollection,所以它看起来是这样的:将集合属性的显示值绑定到组合框

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

我想有结合在这8名对象中列出的各个属性3个组合框,所以组合框看起来像“启动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> 

有人可以帮助我确定如何绑定存储在集合中的组合框显示的显示值对象的属性?

我已经尝试添加在MSDN here的ListBoxinvestigating的MultiBinding样品一个DataTemplate如下图所示,但接收低于一个错误:

//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 2009-10-30 19:34:31