Ответ 1
У меня есть простое приложение сетки; как я могу связать один из элементов на странице страницы элемента группы с страницей детализации пользовательского элемента?
Итак, откройте приложение, которое создается при использовании шаблона "Grid App" из Visual Studio.
Класс данных для элементов на странице элементов группы - это класс SampleDataItem
. Вы можете добавить некоторый тип поля данных (bool
, int
или другой), который указывает, как обрабатывать навигацию. В этом примере мы сохраняем его простым, поэтому мы добавляем bool
, чтобы указать, является ли таможня обычаем или нет.
public class SampleDataItem : SampleDataCommon
{
// add flag as last param
public SampleDataItem(String uniqueId, String title, String subtitle,
String imagePath, String description, String content, SampleDataGroup group,
bool isCustomNav = false)
: base(uniqueId, title, subtitle, imagePath, description)
{
this._content = content;
this._group = group;
this.IsCustomNav = isCustomNav;
}
// to keep it simple this doesn't handle INotifyPropertyChange,
// as does the rest of the properties in this class.
public bool IsCustomNav { get; set; }
...
}
Поэтому, когда вы добавляете новый объект SampleDataItem
, который должен отображаться, вам просто нужно установить поле isCustomNav
в конструкторе.
Теперь все, что нам нужно сделать, это изменить уже существующий обработчик события кликов в сетке на сгруппированной странице позиций (GroupedItemsPage.xaml.cs):
void ItemView_ItemClick(object sender, ItemClickEventArgs e)
{
// Navigate to the appropriate destination page, configuring the new page
// by passing required information as a navigation parameter
var item = (SampleDataItem)e.ClickedItem;
var itemId = item.UniqueId;
if (item.IsCustomNav == false)
{
// default
this.Frame.Navigate(typeof(ItemDetailPage), itemId);
}
else
{
// custom page
this.Frame.Navigate(typeof(ItemDetailPage2), itemId);
}
}
Все, что мы делаем выше, это получение выбранного элемента, а затем тестирование флага навигации, добавленного нами ранее. Исходя из этого, мы переходим либо к исходному ItemDetailPage
, либо к новому, называемому ItemDetailPage2
. Как я уже упоминал ранее, флаг навигации не должен быть bool
. Это может быть int
или enum
или какой-либо другой тип, который сообщает нам, куда перемещаться.
Обратите внимание, что если вы хотите подобное поведение в GroupDetailsPage
, вам просто нужно обновить обработчик события click там же.
Надеюсь, что это поможет.