0

3つのTextBlockを持つItemTemplateを持つリストビューがアプリにあります。ListviewのItemsSourceプロパティは、「ConversionEngine」という名前のクラスの「units」という名前のリストに設定されています。

したがって、私の問題は次のとおりです。ItemTemplateの2番目と3番目のTextBlockを、同じ「ConversionEngine」クラスの別のリストにバインドします。しかし、ListviewのItemsSourceプロパティが文字列の「units」リストに設定されており、ItemTemplateのすべてのサブアイテムが「units」リストを継承しているため、できません。サブアイテムを別のリスト、ConversionEngineの同じクラス、または定義した別のクラスにバインドするにはどうすればよいですか?ありがとう...ここに私のコードがあります:

リストビュー:

<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>
4

1 に答える 1

0

Itemscontrolアイテムは、UI要素にのみバインドできます。これらの要素には、相対ソースと、指定されたデータコンテキストの一部を使用してアクセスできます。私の提案は、さまざまなリストを1つのリストに統合するか、少なくとも、バインドされたプロパティからグループ化されたアイテムを返すことです。だからどちらか:

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;
}
于 2012-09-09T16:18:26.830 に答える