如何在第一个listview中的第二个listview的ItemsSource中绑定listview中元素的索引?

时间:2018-01-25 21:00:10

标签: listview xamarin xamarin.forms

在我的QuestionsPage中,我在另一个列表视图(ListView)中有一个AnswersListViewQuestionsListView)。 如何在ItemsSource的{​​{1}}中引用问题的索引(在QuestionsListView中)? 为了使它更清晰,这里是一个简化的代码...我想用问题的索引替换AnswersListView。 希望这是可以理解的。

在我的XAML中:

???

我的模型(了解一个人与另一个人的关系):

<ListView x:Name="QuestionsListView"
    ItemsSource="{Binding Challenge.questions}"
    <ListView.ItemTemplate>
        <DataTemplate>

            <ListView x:Name="AnswersListView"
                ItemsSource="{Binding Challenge.questions[???].answers, Source={x:Reference QuestionsPage}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <local:AnswerButton Text="{Binding isCorrect}" Command="{Binding BindingContext.CheckAnswerCommand, Source={x:Reference QuestionsPage}" CommandParameter="{Binding isCorrect}"/>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

1 个答案:

答案 0 :(得分:1)

您不必从原始DataContext引用它。使用ItemsSource实际上是将Challenge.question属性设置为列表的数据源。现在,当您定义ListView.ItemTemplate时,您实际上是在列表中的一个问题的上下文中。所以{Binding}内的每个DataTemplate都与问题本身有关(除非你另有说明)。

这意味着,您只需使用{Binding answers}将内部列表绑定到可用答案列表:

<ListView x:Name="QuestionsListView"
    ItemsSource="{Binding Challenge.questions}"
    <ListView.ItemTemplate>
        <DataTemplate>    
            <ListView x:Name="AnswersListView"
                ItemsSource="{Binding answers}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <local:AnswerButton Text="{Binding isCorrect}" Command="{Binding BindingContext.CheckAnswerCommand, Source={x:Reference QuestionsPage}" CommandParameter="{Binding isCorrect}"/>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>