2013-12-24 3 views
1

В основном все шло хорошо, пока я не щелкнул по второстепенной плите моего приложения, и ничего не было обновлено. Сейчас я сейчас работаю над записью, а одна из основных функций - привязать заметку к стартовому экрану.WP8 - Не удалось обновить параметры плитки (нераскрытые)

Проблема заключается в том, что после создания плитки ей присваивается уникальный случайный идентификатор, так что если содержимое плитки нуждается в изменении этого идентификатора, то будет использоваться этот фрагмент, если он закреплен и обновлен так. Уникальный идентификатор создается, как только пользователь нажимает на новую заметку и не будет меняться.

В принципе, он делает эту часть правильно, это просто, когда я нажимаю вторичное приложение, оно берет меня на страницу с параметрами, которые я изначально создал, а не теми, которые я модифицировал.

например. Я создаю записку и TITLE: Привет и СООБЩЕНИЕ: HI !!!. и прикрепите его к началу. Теперь плитка показывает мне название и сообщение. Я решил внести изменения в примечание. Я меняю название на: да и сообщение: нет. Я открываю приложение и вношу изменения в заметку, и все обновляется. Теперь у меня есть модифицированная заметка, которая автоматически обновляется. Теперь плитка показывает мне измененную ноту. поэтому содержание плитки будет да и нет.

Но я решил просмотреть записку, нажав на плитку. Он выводит меня на страницу, но вместо отображения измененного содержания заметки он показывает мне исходный текст заметки, который является 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 

вы видите мою проблему? если это недостаточно ясно, пожалуйста, уточните, пожалуйста. Спасибо.

+0

Вы уверены, что обновили данные нот в источнике данных, кроме обновления данных Tiles? Я предположил, что при просмотре плитки открывается страница CreateNote и загружает данные из источника данных на основе параметров Uri. – har07

+0

Привет, да Заметка обновляется и сохраняется в хранилище. После сохранения заметки, которая вызывает событие обновления. Таким образом, в основном все обновляется, и когда пользователь нажимает на плитку с обновленной информацией, навигационная панель переходит на страницу, но показывает старое содержимое. Я обновил свой пост с видео, четко показывающим, что я имею в виду. –

+0

Более подходящий код для включения в вопрос - это тот, который считывает параметры Uri и загружает соответствующие данные на странице CreateNote. Проблема, скорее всего, будет там, поскольку создание и обновление данных Tile работало так, как вы хотите. – har07

ответ

1

Вот проблема:

Ваше приложение будет отображать информацию, передаваемую в параметры Ури, но в операции обновления Плитки вы покидаете плитку Uri не обновляется с новым параметром значением данных -Только Плитки в процессе обновления -.

И возможное решение:

Поскольку NavigationUri свойство ShellTile только для чтения, я полагаю, что Ури ОБНОВЛЕНИЕ плитка не поддерживается. Поэтому я предлагаю альтернативу всегда создавать новый Tile, а затем удалять старый Tile, если он уже существует.

+0

Хорошо. Спасибо за этот пост, по крайней мере, сейчас я получаю картинку :) –