0

Observable Collection から継承された CompaniesCollection に含まれる Company オブジェクトのコレクションがあります。CollectionViewSource を介して、これらの会社をリスト ボックスに表示しています。私の要件の 1 つは、各会社の項目は、各会社に関連付けられた (アドレスのコレクションの) 最初のアドレスの市と州を表示する必要があるということです。

これらの値を表示するために考えられることはすべて試しましたが、できないようです。各 Company オブジェクトに実際に少なくとも 1 つの Address があることを確認しました (ほとんどの場合、2 つ以上あります)。

会社を表示するために使用している ListBoxItemContainer の ControlTemplate は次のとおりです。

<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 に Addresses (およびその連絡先) を読み込んで、無駄にアクセスしようとしました。DataBound ListBoxItem で子コレクション (およびそのコレクション内の特定のアイテム) にアクセスするにはどうすればよいですか? どんな助けでも非常に役に立ちます。

4

1 に答える 1

1

これは、アドレスのコレクションを保持するオブジェクトのプロパティがどのように見えるかによって異なります。しかし、間違いなく簡単なので、FirstAddressという名前のプロパティを会社に追加して、ゲッターのコレクションの最初の要素を返すのはどうでしょうか。次に、FirstAddress.Cityなどにバインドできます。コレクションが空の場合などはnullを自由に返すことができるため、バインドだけに依存する必要はありません。

于 2010-09-18T01:08:18.133 に答える