Как сделать динамическое меню в Windows Phone 7

В общем решил попробовать себя в этом деле, написать клиент для своего сайта в целях самообразования. Никакая монетизация не предвидится :)

Как правильно организовать «меню» — т.е. например я с сайта получаю список объектов. Потом я хочу чтобы при тапе на объект открывалась страница с описанием объекта.

Пока я сдела это так:

XAML:
                    <ListBox  HorizontalAlignment="Left" Margin="9,0,0,0" Name="listBox1" VerticalAlignment="Top" SelectionChanged="OnChange" ItemsSource="{Binding}" SelectionMode="Single" >
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal" Margin="4">
                                    <Image Source="{Binding Path=Logo}" Width="82" Height="62" Stretch="Fill" />
                                    <StackPanel Margin="4,0,0,0">
                                        <TextBlock Text="{Binding Path=Name}" TextWrapping="Wrap" TextTrimming="WordEllipsis" />
                                        <StackPanel Orientation="Horizontal">
                                            <TextBlock Text="Инвестиции от " TextWrapping="Wrap" />
                                            <TextBlock Text="{Binding Path=Invest}" TextWrapping="Wrap" />
                                            <TextBlock Text=" руб." TextWrapping="Wrap" />
                                        </StackPanel>
                                    </StackPanel>
                                </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>

С#:
                    var searchResults = from result in resultXml.Descendants("fr")
                                        select new FranchiseOnMain
                                        {
                                            // Get the Title, Description and Url values.
                                            Logo = result.Element("logo").Value,
                                            Name = result.Element("name").Value,
                                            Id = result.Element("id").Value,
                                            Invest = result.Element("invest").Value
                                        };
                    listBox1.DataContext = searchResults;


Т.е. есть листбокс в который я гружу данные, полученные от сервера в формате xml.

Теперь мне надо чтобы по тапу на элемент листбокса открывалась другая страница с расширенным описанием этого объекта.

Я сделал это так:
        private void OnChange(object sender, SelectionChangedEventArgs e)
        {
            if (listBox1.SelectedItem != null)
            {
                TextBlock textblock1 = new TextBlock();
                FranchiseOnMain fr = (FranchiseOnMain)listBox1.SelectedItem;
                string uri = "/FranchisePage.xaml?id=" + fr.Id + "&name=" + fr.Name;
                NavigationService.Navigate(new Uri(uri, UriKind.RelativeOrAbsolute));
                listBox1.SelectedItem = null;
            }
        }


Т.е. после выбора объекта я открываю используя navigation service другую страницу с параметром, и обнуляю выбор, чтобы когда я вернусь обратно на главную — в листбоксе ничего не было выбрано.

Если выбор не обнулять то потом возникает проблема что вернувшись в список объектов я не могу снова попасть на тот же самый потому что он уже выбран в листбоксе и SelectionChanged не срабатывает.

Но мне не нравится такое решение, я хочу сделать нормально. Как это сделать правильно? Нужно использовать не листбокс а какой то другой контрол? Бывают ли другие контролы, которые умеют автоматически подгружать коллекцию объектов или надо будет вручную это делать? В принципе вручную сделать не проблема если подскажете какой ставить контрол для перехода между страницами (с нормально анимацией нажатия).
  • Вопрос задан
  • 3182 просмотра
Решения вопроса 1
Fr3nzy
@Fr3nzy
Как вариант, можете использовать OnTap на ListBox'e, тогда вам не придется снимать выделение с элемента (тем более, это вообще плохо с точки зрения UX).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы