全景项目的数据绑定

时间:2013-06-06 15:31:01

标签: c# json xaml binding

这是我的情况......

我有一个Panorama从Web服务获取JSON数据。 它包含新闻,包括图像,标题,内容,发布日期和新闻类型。 现在我可以生成全景图来显示每个图片,标题和内容,下面是这些XAML代码。

<controls:Panorama x:Name="NewsPanorama" ItemsSource="{Binding Items}" Title="" HorizontalAlignment="Left" Height="750" VerticalAlignment="Top" Width="477" Margin="-2,0,0,0">
            <controls:Panorama.ItemTemplate>
                <DataTemplate>
                    <controls:PanoramaItem Orientation="Horizontal" Header="{Binding Type}">
                        <Grid Height="595" VerticalAlignment="Top" Margin="0,-21,0,0">
                            <Image x:Name="imgAds1" HorizontalAlignment="Left" Height="595" VerticalAlignment="Top" Width="417" Source="{Binding Image.Url}" Stretch="UniformToFill"/>
                            <Rectangle Fill="Black" HorizontalAlignment="Left" Height="106" Margin="0,489,0,0" VerticalAlignment="Top" Width="417" Opacity="0.44"/>
                            <TextBlock x:Name="Title" HorizontalAlignment="Left" Height="81" Margin="7,489,0,0" TextWrapping="Wrap" Text="{Binding Title}" VerticalAlignment="Top" Width="397" FontSize="40"/>
                            <TextBlock x:Name="Content" HorizontalAlignment="Left" Height="40" Margin="7,540,0,0" TextWrapping="Wrap" Text="{Binding Content}" VerticalAlignment="Top" Width="397" FontSize="15"/>
                            <TextBlock x:Name="TypeOfContent" HorizontalAlignment="Left" Height="40" Margin="7,590,0,0" TextWrapping="Wrap" Text="{Binding Type}" VerticalAlignment="Top" Width="397" FontSize="15" Visibility="Collapsed"/>
                        </Grid>
                    </controls:PanoramaItem>
                </DataTemplate>
            </controls:Panorama.ItemTemplate>
            <controls:Panorama.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Visibility="Collapsed" />
                </DataTemplate>
            </controls:Panorama.HeaderTemplate>
        </controls:Panorama>

但是当我想在Panorama上使用Tab方法导航时。我不知道如何获取属性,这些属性是导航页面的标题或新闻类型。 例如,我想为我的导航获取TypeOfContent TextBlock或{Binding Type},但我不知道该怎么做。

现在我在c#中的导航代码是这样的。

void NewsPanorama_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        int selectedIndex = NewsPanorama.SelectedIndex;
        //I just try something that doesn't work here.
        /*Panorama panoramactrl = (Panorama)sender;
        PanoramaItem panoramaItem = (PanoramaItem)(panoramactrl.SelectedItem);*/
        //String header = NewsPanorama.SelectedItem.Header.ToString();


        NavigationService.Navigate(new Uri("/ViewContentDetail.xaml?itemId=" + selectedIndex , UriKind.Relative));
    }

您可以看到我可以将selectedIndex发送到ViewContentDetail.xaml,但我无法将NewsPanorama.SelectedItem的标头发送到该页面。因为我需要PanoramaItem的一些属性来从Web服务中检索另一个JSON。

你能给我一些建议吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您知道所选索引,则可以直接从用于绑定的Items集合中获取项目:

var selectedItem = Items[NewsPanorama.SelectedIndex];

其他方法是获取所选项目的DataContext并进行投射,如下所示:

var selectedItem = (NewsPanorama.SelectedItem as PanoramaItem).DataContext as SomeItem;