字符串返回null

时间:2015-04-18 11:45:35

标签: windows-phone-8.1

我正面临使用e.ClickedItem获取字符串值的问题。

这是我的ListView的样子:

 <ListView
        x:Name="PoemListView"
        AutomationProperties.AutomationId="PoemListView"
        AutomationProperties.Name="Poems In Item"
        TabIndex="1"
        ItemsSource="{Binding Item.Poems}"
        IsItemClickEnabled="True"
                    ItemClick="PoemView_PoemClick" 
        SelectionMode="None"
        SelectionChanged="PoemSelectionChanged"
        IsSwipeEnabled="False" Padding="0,0,0,0" Margin="0,0,0,0"
            ContinuumNavigationTransitionInfo.ExitElementContainer="True">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>


                        <StackPanel   Grid.Column="1" VerticalAlignment="Top" Margin="0,0,0,27.5" HorizontalAlignment="Left"  ScrollViewer.VerticalScrollBarVisibility="Hidden">
                            <!--<CheckBox x:Name="PoemCheckbox" Checked="ContentChecked" Unchecked="ContentUnchecked"/>-->
                            <TextBlock x:Uid="PoemId" Name="PoemId" Text="{Binding PoemId}" DataContext="{Binding}" Style="{ThemeResource ListViewItemSubheaderTextBlockStyle}" TextWrapping="WrapWholeWords"/>
                            <TextBlock x:Uid="PoemTitleId" Text="{Binding PoemTitle}" FontSize="{Binding ElementName=FontSlider, Mode=OneWay, Path=Value}" DataContext="{Binding}" Style="{ThemeResource ListViewItemSubheaderTextBlockStyle}" Foreground="{ThemeResource PhoneMidBrush}" TextWrapping="WrapWholeWords"/>
                            <TextBlock x:Uid="PoemMeanId" Text="{Binding PoemMean}"  DataContext="{Binding}" Style="{ThemeResource ListViewItemSubheaderTextBlockStyle}" TextWrapping="WrapWholeWords"/>

                        </StackPanel>

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

这是xaml页面背后的代码:

private void PoemView_PoemClick(object sender, ItemClickEventArgs e)
    {


     TextBlock PoemId = e.ClickedItem as TextBlock;


       this.Frame.Navigate(typeof(Favorite), (e.ClickedItem as TextBlock));

在收藏页面的LoadState事件中,我添加了以下代码:

private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
    {
     string poem = e.NavigationParameter as string;


     if (string.IsNullOrEmpty(poem))
       {
           FavText.Text = "no favorite text";

        }

       else { FavText.Text = poem;

     }

    }

问题在于LoadState,而e.NavigationParameter加载了传递给它的字符串,字符串诗没有正确加载。因此,FavText.Text始终返回&#34;没有收藏的文字&#34;。

任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

将e.ClickedItem强制转换为TextBlock

时,您的PoemId可能为null

试试这个

Poem poem = e.ClickedItem as Poem;
this.Frame.Navigate(typeof(Favorite), poem);

答案 1 :(得分:0)

我没有将e.ClickedItem强制转换为TextBlock,而是更新了以下代码,完全没问题:

var type = ((PoemItem)e.ClickedItem).PoemTitle;
        this.Frame.Navigate(typeof(Favorite), type);