【问题标题】:WP8 - Unable to update Tile ParametersWP8 - 无法更新平铺参数
【发布时间】:2013-12-24 23:00:52
【问题描述】:

基本上一切都很好,直到我点击了我的应用程序的辅助磁贴并且没有任何更新。我现在正在做的是一个笔记应用程序,其中一个主要功能是将笔记固定到开始屏幕。

问题在于,一旦创建了磁贴,它就会被分配一个唯一的随机 ID,因此如果磁贴的内容需要更改,该 ID 将用于查找该磁贴,如果它被固定并更新。用户在新笔记上点击保存后会生成唯一 ID,并且不会更改。

基本上这部分没问题,只是一旦我点击辅助应用程序,它会将我带到一个页面,其中包含我最初创建的参数,而不是我修改过的参数。

例如 我创建了一个注释和标题:你好和消息:你好!!!。并将其固定在开头。现在磁贴向我显示标题和消息。 我决定对笔记进行更改。我将标题更改为:是,消息更改为:否。我打开应用程序并对笔记进行更改,一切都会更新。现在我有自动更新的修改后的注释。现在磁贴向我显示修改后的注释。所以瓷砖内容将是和否。

但我决定通过单击磁贴来查看注释。它带我到页面,但不是显示注释的修改内容,而是显示初始注释文本,即 Hello and Hi!!而不是是和否。

我的创建和更新源代码是:

 Dim contextMenuListItem As ListBoxItem = DirectCast(ItemsList.ItemContainerGenerator.ContainerFromItem(DirectCast(sender, MenuItem).DataContext), ListBoxItem)
    Dim item As SampleData1 = DirectCast(contextMenuListItem.Content, SampleData1)
    Dim TileToFind As ShellTile = ShellTile.ActiveTiles.FirstOrDefault(Function(x) x.NavigationUri.ToString().Contains("parameter2=" & item.ID))
    If TileToFind Is Nothing Then
        Dim TileData As New IconicTileData() With { _
           .Title = item.Name, _
           .WideContent1 = item.Name, _
           .WideContent2 = item.Description, _
            .WideContent3 = item.ID, _
           .SmallIconImage = New Uri("Assets/Tiles/IconicTileSmall.png", UriKind.Relative), _
           .IconImage = New Uri("Assets/Tiles/IconicTileMediumLarge.png", UriKind.Relative), _
           .BackgroundColor = Colors.Transparent}
        ShellTile.Create(New Uri("/CreateNote.xaml?parameter=" & TileData.Title.ToString & "&parameter1=" & TileData.WideContent2.ToString & "&parameter2=" & TileData.WideContent3.ToString, UriKind.Relative), TileData, True)

    Else
        Dim TileData As New IconicTileData() With { _
           .Title = item.Name, _
           .WideContent1 = item.Name, _
           .WideContent2 = item.Description, _
           .SmallIconImage = New Uri("Assets/Tiles/IconicTileSmall.png", UriKind.Relative), _
           .IconImage = New Uri("Assets/Tiles/IconicTileAssets/IconicTileMediumLarge.png", UriKind.Relative), _
           .BackgroundColor = Colors.Transparent}

        TileToFind.Update(TileData)

    End If

视频显示我的意思:https://www.youtube.com/watch?v=xsedPk7YKdw

添加 ======================================= ============================================

使用导航参数创建磁贴的代码:

ShellTile.Create(New Uri("/CreateNote.xaml?parameter=" & TileData.Title.ToString & "&parameter1=" & TileData.WideContent2.ToString & "&parameter2=" & TileData.WideContent3.ToString, UriKind.Relative), TileData, True)

在 CreateNote 页面上的参数:

Protected Overrides Sub OnNavigatedTo(ByVal e As System.Windows.Navigation.NavigationEventArgs)
    MyBase.OnNavigatedTo(e)

    Dim parameter As String = String.Empty
    Dim parameter1 As String = String.Empty
    Dim parameter2 As String = String.Empty

    If NavigationContext.QueryString.TryGetValue("parameter", parameter) Then
        Me.Title.Text = parameter
        OldFName.Text = parameter
    End If
    If NavigationContext.QueryString.TryGetValue("parameter1", parameter1) Then
        Me.Message.Text = parameter1
    End If
    If NavigationContext.QueryString.TryGetValue("parameter2", parameter2) Then
        Me.IDG.Text = parameter2
    End If

End Sub

你看到我的问题了吗?

【问题讨论】:

  • 除了更新Tiles数据之外,你确定你更新了数据源中的notes数据吗?我假设当一个磁贴被点击时,CreateNote 页面打开并根据 Uri 参数从数据源加载笔记数据。
  • 嗨,是的,Note 确实会更新并保存到存储位置。一旦保存了触发更新磁贴事件的注释。所以基本上它都更新了,当用户单击带有更新信息的磁贴时,导航会转到页面但显示旧内容。我已经用一段视频更新了我的帖子,清楚地表明了我的意思。
  • 问题中要包含的更相关的代码是读取 Uri 参数并在 CreateNote 页面中加载相关数据的代码。问题更可能存在,因为创建和更新 Tile 数据已按您的意愿进行。
  • 嘿,我更新了我的帖子
  • 你能帮我解决这个问题吗? :)

标签: windows-phone-8 tile


【解决方案1】:

问题来了:

您的应用程序将显示传递给 Uri 参数的信息,但在更新 Tile 操作中您不会使用新参数值更新 Tile Uri - 只有 Tile 的数据正在更新 -。

以及可能的解决方案:

由于 ShellTile 的 NavigationUri 属性是只读的,我假设不支持更新 Tile 的 Uri。因此,我建议始终创建一个新的 Tile,然后删除旧的 Tile(如果它已经存在)。

【讨论】:

  • 好的。谢谢你的帖子,至少现在我得到了照片:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
相关资源
最近更新 更多