У меня есть базовая программа для чтения RSS, которая отображает список сообщений блога в listView в левом столбце Grid.Column. В правом Grid.Column находится WebView. Когда пользователь выбирает элемент в listView, Webview обновляется Uri и отображает веб-страницу.
Теперь я добавил BottomAppBar и создал кнопки Pin/UnPin. Я успешно создал возможность закрепления, однако я не передаю никаких данных в строку запроса NavigationContext. Поэтому, когда пользователь нажимает на закрепленную плитку, он ссылается только на всю страницу, а не на выбранную статью. Это загружает все последние статьи, а не URL-адрес выбранного элемента.
Я знаю, что мне нужно передать URL-адрес в строку запроса закрепленной плитки, но я застрял здесь. Я делал это десятки раз в своих приложениях для Windows Phone, но я застрял здесь из-за этого приложения для Windows 8. В WP7 я использую контекстное меню для закрепления элемента. Здесь я закрепляюсь на панели приложений и не могу получить URL-адрес и добавить его в качестве строки запроса (как мой TileActivationArgument)
В основном мне нужно руководство о том, как получить данные выбранного элемента и поместить их на плитку, и как прочитать их обратно. Вот мой метод Pin():
РЕДАКТИРОВАТЬ: я пошел дальше и сделал временное рабочее решение, но оно не решает мою проблему невозможности получить свойства выбранного элемента. Комментарии встроены в код
private async void PinTileHelper(string message, object sender)
{
//This is my preferred method, but I cannot extract the SelectedItem's properties
//var item = itemListView.SelectedItem;
//I'm not able to use the sender because this is a button click
//var selectedItem = (FeedItems)((ListView)sender).SelectedItem;
//As a cheesy workaround, I just took the Uri directly from the WebView's source Uri
var ActivationArgument = this.ContentView.Source.ToString();
Uri logo = new Uri("ms-appx:///Assets/squareTile-sdk.png");
//Uri smallLogo = new Uri("ms-appx:///Assets/smallTile-sdk.png");
SecondaryTile secondaryTile = new SecondaryTile("Toolbox",
"Fantasy Football Tile",
"Article name goes here and ",
ActivationArgument,
TileOptions.ShowNameOnLogo,
logo);
secondaryTile.ForegroundText = ForegroundText.Dark;
//secondaryTile.SmallLogo = smallLogo;
bool isPinned = await secondaryTile.RequestCreateAsync();
MessageDialog dialog = new MessageDialog("Pinned?");
if (isPinned)
{
dialog.Content = "You have succesfully pinned this tile";
await dialog.ShowAsync();
}
else
{
dialog.Content = "Something went wrong. The tile wasn't pinned.";
await dialog.ShowAsync();
}
}
Спасибо за любую информацию, которую вы можете предоставить.
РЕДАКТИРОВАТЬ № 2: Успех!! Безопасное приведение к вашим элементам ItemViewModel делает свое дело.
var item = itemListView.SelectedItem as FeedItems (or your ItemViewModel items);