字符串返回 null

String returning null

我在使用 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;

     }

    }

当 e.NavigationParameter 加载传递给它的字符串时,问题出在 LoadState 中,字符串诗未正确加载。因此,FavText.Text 总是返回 "no favorite text"。

有人知道如何解决这个问题吗?

当您将 e.ClickedItem 转换为 TextBlock

时,您的 PoemId 可能为空

试试这个

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

我没有将 e.ClickedItem 转换为 TextBlock,而是更新了如下代码,效果非常好:

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