silverlight, ListBox возможно ли перейти на новую страницу с объектом? - PullRequest
1 голос
/ 20 ноября 2010

Привет всем, у меня есть список MainListBox, куда я добавляю элементы динамически. Теперь я хочу перейти к DetialsPage.xaml.cs, когда я выбираю элемент в списке. где я могу отобразить информацию о выбранном элементе.

private void SetListBox()
{
    foreach (ToDoItem todo in itemList)
    {
        MainListBox.Items.Add(todo.ToDoName);
    }
}

MainListBox_SelectionChanged («Создано в Visual Studio 2010 silverlight для телефона с Windows 7)

// Handle selection changed on ListBox
private void MainListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    // If selected index is -1 (no selection) do nothing
    if (MainListBox.SelectedIndex == -1)
        return;

    // Navigate to the new page
    NavigationService.Navigate(new Uri("/DetailsPage.xaml?selectedItem=" + MainListBox.SelectedIndex, UriKind.Relative));

    // Reset selected index to -1 (no selection)
    MainListBox.SelectedIndex = -1;
}

в DetailsPage.xaml.cs - следующий метод. («Создано Visual Studio 2010 Silverlight для Windows 7 телефона) Я знаю, что метод ниже не делает то, что я пытаюсь.

// When page is navigated to set data context to selected item in list
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    string selectedIndex = "";
    if (NavigationContext.QueryString.TryGetValue("selectedItem", out selectedIndex))
    {
        int index = int.Parse(selectedIndex);
        DataContext = App.ViewModel.Items[index];
    }
}

Я хотел бы получить доступ к selectedIndex и вызвать мои методы для моего объекта, который находится в MainListbox так в основном: Mainlistbox => выбрать элемент => отправить этот элемент на страницу сведений => страница сведений получить доступ к элементу и вызвать методы для элемента (объекта)

Я уверен, что это основной вопрос, хотя трудно найти какие-либо подробности по нему. Я хотел бы добавить, что это мое первое приложение для Windows Phone 7.

Ответы [ 3 ]

0 голосов
/ 21 ноября 2010

Существует множество способов передачи объекта со страницы на страницу:

  1. сериализовать и десериализовать, как сказал Деннис, но это, хотя и осуществимо, нецелесообразно, если только вы не хотите сохранить объект в изолированном хранилище и извлечь его позже.

  2. Поместите объект в класс App.cs, который доступен для всех страниц. Установите свой объект на главной странице, найдите его на странице сведений.

Код для добавления в App.cs: MyObject selectedObject;

Код для добавления в MasterPage.cs: application.selectedObject = MainListBox.selectedItem;

Код для добавления в DetailsPage.cs: MyObject selectedObject = application.seletedObject;

  1. Вы можете установить объект в DataContext вашего LayoutRoot, но у меня нет кода для этого на моей голове.
0 голосов
/ 21 ноября 2010

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

Затем на странице сведений вы можете получить правильный объект из того же источника данных, из которого основное поле списка получает свои данные (в вашем случае это «itemList», который может исходить, например, от IsolatedStorage).* Если itemList создан и хранится только на главной странице, вы не сможете получить элемент по идентификатору на странице сведений.Поэтому в этом случае вам нужно переместить itemList в какое-то статическое хранилище или хранилище на уровне приложения.

HTH

0 голосов
/ 20 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...