列出动态绑定数的项模板

时间:2012-02-18 16:22:03

标签: windows-phone-7 xaml

平,

所以我假设我有这个ListBox.ItemTemplate:

    <phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Key="DataTemplate1">
        <StackPanel Orientation="Horizontal">
            <StackPanel Height="100" Width="100">
                <TextBlock TextWrapping="Wrap" Text="{Binding name}" FontWeight="Bold"/>
                <TextBlock TextWrapping="Wrap" Text="{Binding age}" FontWeight="Bold"/>
            </StackPanel>
            <StackPanel Height="100" Width="100">
                <Image Height="100"/>
                <Image Height="100"/>
            </StackPanel>
            <StackPanel Height="100" Width="100">
                <TextBlock TextWrapping="Wrap" Text="blah blah" FontSize="13.333"/>
                <TextBlock TextWrapping="Wrap" Text="{Binding something}"/>
            </StackPanel>
            <StackPanel Height="100" Width="100">
                <TextBlock TextWrapping="Wrap" Text="Time" FontSize="13.333"/>
                <TextBlock TextWrapping="Wrap" Text="45 minutes"/>
            </StackPanel>
        </StackPanel>
    </DataTemplate>
</phone:PhoneApplicationPage.Resources>

我想要实现的是第二个堆栈面板中的图像数量,这一个:

                <StackPanel Height="100" Width="100">
                <Image Height="100"/>
                <Image Height="100"/>
            </StackPanel>

是动态的,一些列表框项目为2,其他列表框项目为3或4。

我想知道是否有可能通过绑定和模板来实现这一目标? 我不想在代码中手动执行此操作。

2 个答案:

答案 0 :(得分:2)

您可以使用ListBox替换该特定StackPanel。然后可以将ListBox绑定到Image集合,并可以将其ItemTemplate设置为显示图像。像这样:

        <DataTemplate x:Key="DataTemplate1">
        <StackPanel Orientation="Horizontal">
            <StackPanel Height="100" Width="100">
                <TextBlock TextWrapping="Wrap" Text="{Binding name}" FontWeight="Bold"/>
                <TextBlock TextWrapping="Wrap" Text="{Binding age}" FontWeight="Bold"/>
            </StackPanel>
            <ListBox ItemsSource="{Binding DynamicCollectionOfImages}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Image Height="100" Source="{Binding .}"/>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
            <StackPanel Height="100" Width="100">
                <Image Height="100"/>
                <Image Height="100"/>
            </StackPanel>
            <StackPanel Height="100" Width="100">
                <TextBlock TextWrapping="Wrap" Text="blah blah" FontSize="13.333"/>
                <TextBlock TextWrapping="Wrap" Text="{Binding something}"/>
            </StackPanel>
            <StackPanel Height="100" Width="100">
                <TextBlock TextWrapping="Wrap" Text="Time" FontSize="13.333"/>
                <TextBlock TextWrapping="Wrap" Text="45 minutes"/>
            </StackPanel>
        </StackPanel>
    </DataTemplate>

答案 1 :(得分:-1)

当每个列表项都有不同的图像集时,您应该在主列表中添加另一个ListBox,并将Image控件作为ItemTemplate。

但是当您只有一些图像集(例如,有2,3和4个静态图像)用于整个列表并想要为每个列表项显示其中一个时,您可以准备3个StackPanel的listBoxItem模板并更改其可见性取决于DataSource的某些属性。此属性值应转换为Visibility枚举成员。

EG。当图像应该依赖于DataSource的整数ImagesSet属性时:

<StackPanel Height="100" Width="100" Visibility={Binding ImagesSet, Converter={StaticResources ImagesSetToVisibility}, ConverterParameter=2}>
    <Image Height="100"/>
    <Image Height="100"/>
</StackPanel>
<StackPanel Height="100" Width="100" Visibility={Binding ImagesSet, Converter={StaticResources ImagesSetToVisibility}, ConverterParameter=3}>
    <Image Height="100"/>
    <Image Height="100"/>
    <Image Height="100"/>
</StackPanel>
<StackPanel Height="100" Width="100" Visibility={Binding ImagesSet, Converter={StaticResources ImagesSetToVisibility}, ConverterParameter=4}>
    <Image Height="100"/>
    <Image Height="100"/>
    <Image Height="100"/>
    <Image Height="100"/>
</StackPanel>

转换器应检查,如果value等于参数并返回Visibility.Visbile或Visibility.Collapsed:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    return ((int)value) == ((int)parameter) ? Visibility.Visible : Visibility.Collapsed;
}