2010-09-17 134 views
0

我有一個CompanyCollection中包含的繼承自Observable Collection的公司對象的集合。通過一個CollectionViewSource,我在列表框中顯示這些公司。我的要求之一是每個公司項目必須顯示每個公司附屬的第一個地址(地址集合)的城市和州。綁定到ListBoxItemContainerStyle中的特定集合項目的屬性

我已經嘗試了所有我能想到的來顯示這些值,而且我似乎無法做到。我已驗證每個公司對象確實至少有一個地址(大多數有兩個或更多)。

下面是我使用,以顯示公司的ListBoxItemContainer的控件模板:在努力

<ControlTemplate TargetType="{x:Type ListBoxItem}"> 
    <Grid Height="Auto" Width="Auto" DataContext="{Binding Source={StaticResource CompanyDataSource}}"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Border x:Name="Bd" BorderThickness="{TemplateBinding BorderThickness}" Background="#59000000" SnapsToDevicePixels="true" CornerRadius="10" Padding="3,1" d:LayoutOverrides="Width, Height" Grid.RowSpan="1"> 
      <Grid Height="Auto" Width="Auto" Margin="3,1"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto"/> 
        <RowDefinition Height="Auto"/> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" MinWidth="70"/> 
        <ColumnDefinition Width="*" MinWidth="30"/> 
        <ColumnDefinition Width="20" MinWidth="30"/> 
       </Grid.ColumnDefinitions> 
       <TextBlock TextWrapping="Wrap" Text="{Binding CompanyName}" Style="{DynamicResource TitleText}" Margin="0" VerticalAlignment="Top" d:LayoutOverrides="Width" Grid.ColumnSpan="2"/> 
       <Grid Margin="0" Grid.Column="2" HorizontalAlignment="Right" VerticalAlignment="Top"> 
        <Ellipse Fill="#FFAB1D1D" HorizontalAlignment="Left" Height="13" Stroke="#FFDE5B5B" VerticalAlignment="Top" Width="13"/> 
       </Grid> 
       <Grid Grid.Column="1" Grid.Row="1"> 
        <Grid Grid.Column="0" Grid.Row="0"> 
         <TextBlock Margin="0" TextWrapping="Wrap" Text="{Binding Addresses[0].City}" d:LayoutOverrides="Width, Height" Grid.Column="0" Grid.Row="0" Style="{DynamicResource SubtitleText}"/> 
        </Grid> 
       </Grid> 
       <TextBlock Margin="0" TextWrapping="Wrap" Text="{Binding CompanyName2}" d:LayoutOverrides="Width, Height" Grid.Row="1" Style="{DynamicResource SubtitleText}"/> 
      </Grid> 
     </Border> 
     <Border BorderThickness="0" Grid.ColumnSpan="1" Grid.RowSpan="1" Margin="7,0" Grid.Row="1" CornerRadius="0,0,10,10" Background="#4CFFFFFF"> 
      <ListBox Background="#00000000" ItemTemplate="{DynamicResource ContactTemplate}" ItemsSource="{Binding Contacts}"/> 
     </Border> 
    </Grid> 
</ControlTemplate> 

我也曾嘗試加載地址(爲此事聯繫)插入ControlTemplate.Resources CollectionViewSources試圖訪問它們無濟於事。如何在DataBound ListBoxItem中訪問子集合(以及該集合中的特定項目)?任何幫助都將非常有幫助。

回答

1

這取決於你的對象的屬性保存的地址集合看起來像。但是由於這可能會更容易,爲什麼不簡單地向您的公司添加一個名爲FirstAddress的屬性並返回集合中第一個元素到getter?然後你可以綁定到FirstAddress.City等等。當集合爲空或者其他任何東西時,你可以自由地返回null,所以你不僅僅依賴綁定。

+0

我已經通過這樣做了。不知道未來是否會帶來更進一步的要求,讓我爲公司類添加越來越多的項目以繞過上述行爲。這將是一個簡單的修復。感謝您的意見。 – CodeWarrior 2010-09-19 19:10:47

相關問題