将Listview项的子项绑定到另一个数据

时间:2012-09-09 15:47:22

标签: c# windows xaml windows-8

我的应用中有一个Listview,它有一个包含三个TextBlocks的ItemTemplate。 Listview的ItemsSource属性设置为名为“ConversionEngine”的类中名为“units”的List ...

所以我的问题是:我想将ItemTemplate中的第二个和第三个TextBlocks绑定到同一个“ConversionEngine”类中的另一个List。但我不能,因为Listview的ItemsSource属性设置为“units”字符串列表和ItemTemplate的所有子项继承“units”列表。如何将子项绑定到另一个列表,在同一个ConversionEngine类或我定义的其他类中?谢谢......这是我的代码:

Listview:

<ListView x:Name="allunits" **ItemsSource="{Binding units}**" SelectionMode="Single" IsItemClickEnabled="True" ItemClick="allunit_itemclick" SelectedIndex="-1" ItemTemplate="{StaticResource Standard500x130ItemTemplate}"/>

ItemTemplate代码:

<DataTemplate x:Key="Standard500x130ItemTemplate">

        <Grid Height="110" Width="480" Margin="10" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="110" Height="110">
                <Image Source="{Binding Image}" Stretch="UniformToFill"/>
            </Border>
            <StackPanel Grid.Column="1" VerticalAlignment="Top" Margin="10,0,0,0">
              **<TextBlock Text="{Binding}" Style="{StaticResource TitleTextStyle}"/>**
              **<TextBlock  Text="{Binding ??}" Style="{StaticResource TitleTextStyle}/>**
              **<TextBlock  Text="{Binding ??}" Style="{StaticResource TitleTextStyle}"/>**
            </StackPanel>
        </Grid>
    </DataTemplate>

1 个答案:

答案 0 :(得分:0)

Itemscontrol项目只能绑定到UI元素,可以使用相对源和它们所提供的datacontext部分访问的内容。我的建议是将您的不同列表合并到一个列表中,或者至少从您的绑定属性返回分组项目。所以:

public class CompositeItem
{
  Item item;               //item from your first list
  Item2 item2;             //item from your second list
  . . .
}

//main class
List<CompositeItem> items;  //list of combined items

或:

public Tuple<Item, Item2 . . . > items //bind your items control to this
{
    List<Tuple<Item, Item2 . . >> newListOfItems = new Tuple<Item, Item2 . . >(); 
    for(int i = 0; i < items.count; i++)
    {
        newListOfItems.add(new Tuple<Item, Item2 . . >(list1[i], list2[i] . . .));
    }
    return newListOfItems;
}