我有一份报告要填写,由List
个部分组成,每个部分都有List
个问题。我当前的实现使用Pivot
控件,其ItemsSource
设置为List
个部分,DataTemplate
是LongListSelector
ItemsSource
设置为List
LongListSelector
个问题。
当用户尝试提交报告时,我会遍历所有问题以检查其有效性。如果任何回复无效,则设置一个标志,并在该问题旁边显示错误消息。
我希望能够专注于设置了该标志的第一个问题,但无法弄清楚如何获得对所需ScrollTo
的引用,以便我可以将其称为<phone:Pivot toolkit:TurnstileFeatherEffect.FeatheringIndex="0"
Name="QuestionPivot"
ItemsSource="{Binding Sections, Mode=TwoWay}">
<phone:Pivot.Title>
<TextBlock>
<Run Text="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}"/>
<Run Text=" "/>
<Run Text="{Binding Path=LocalizedResources.DailyReport, Source={StaticResource LocalizedStrings}}"/>
<Run Text=" - "/>
<Run Text="{Binding ProjectName}"/>
</TextBlock>
</phone:Pivot.Title>
<phone:Pivot.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding SectionName}"/>
</DataTemplate>
</phone:Pivot.HeaderTemplate>
<phone:Pivot.ItemTemplate>
<DataTemplate>
<phone:LongListSelector ItemsSource="{Binding Questions, Mode=TwoWay}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0 0 0 20">
...
</StackPanel>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
</DataTemplate>
</phone:Pivot.ItemTemplate>
</phone:Pivot>
方法。
代码:
查看
private void FocusOnFirstInvalid(object sender, EventArgs e)
{
int selectedItem = 1;
foreach (ReportDraftSection s in QuestionPivot.Items)
{
foreach(ReportQuestion q in s.Questions)
{
if(q.IsNotValid)
{
QuestionPivot.SelectedIndex = selectedItem;
var l = (LongListSelector)QuestionPivot.SelectedItem;
l.ScrollTo(q);
}
}
selectedItem += 1;
}
}
代码隐藏(包括我尝试将SelectedItem强制转换为LongListSelector ...)
{{1}}
非常感谢任何帮助。
答案 0 :(得分:0)
由于Pivot的ItemsSource
是Section
的列表,QuestionPivot.SelectedItem
包含Section
对象而不是LongListSelector。您可以尝试使用ItemContainerGenerator
从SelectedItem
获取PivotItem,然后从PivotItem的Content
获取LongListSelector(尚未测试):
.......
QuestionPivot.SelectedIndex = selectedItem;
var pivotItem = (PivotItem)QuestionPivot
.ItemContainerGenerator
.ContainerFromItem(QuestionPivot.SelectedItem);
var l = (LongListSelector)pivotItem.Content;
l.ScrollTo(q);
.......