WP7 - доступ к выбранному элементу в списке, когда список находится в шаблоне элемента - PullRequest
0 голосов
/ 16 июня 2011

У меня есть шаблон элемента Pivot, который включает в себя список

 <controls:Pivot x:Name="MainPivot" ItemsSource="{Binding PivotItemHeaders}" Title="CLASS TIMETABLE"  >
        <controls:Pivot.HeaderTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Description}"/>
            </DataTemplate>
        </controls:Pivot.HeaderTemplate>
        <controls:Pivot.ItemTemplate>
            <DataTemplate>
                <ListBox x:Name="Events" ItemsSource="{Binding allEventItems}" ItemTemplate="{StaticResource EventDisplay2}"/>
            </DataTemplate>
        </controls:Pivot.ItemTemplate>
    </controls:Pivot>

В приведенном ниже коде я хочу получить доступ к selectedItem этого списка, но не могу «добраться» до списка как такового, потому что он (предположительно) находится внутри шаблона

т.е.

this.NavigationService.Navigate(new Uri("/View/EventEdit.xaml?selectedEvent=" +  Events.SelectedItem, UriKind.Relative));

Список событий не распознается.

Предположим, я могу передать получить объект и передать его в качестве параметра, какой код я могу использовать для его получения

Я знаю, это начинается с защищенное переопределение void OnNavigatedTo (NavigationEventArgs e) { if (NavigationContext.QueryString.ContainsKey ("SelectedEvent")) {

Но я не уверен в синтаксисе / коде для извлечения объекта из параметров

Оцените, как я могу получить selectedItem из этого списка и код, чтобы получить объект, проходящий через

  • спасибо

1 Ответ

2 голосов
/ 16 июня 2011

Вместо того, чтобы пытаться получить доступ к ListBox, вы можете использовать событие SelectionChanged, которое будет сообщено при изменении значения:

<ListBox x:Name="Events" 
         ItemsSource="{Binding allEventItems}" 
         ItemTemplate="{StaticResource EventDisplay2}"
         SelectionChanged="Event_SelectionChanged" />

А потом в вашем коде позади:

private void Event_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    this.selectedEvent = (EventItem)e.AddedItems[0];
}

Вы можете получить доступ к значению, используя NavigationContext.QueryString["selectedEvent"], но вы можете хранить только строки в строках навигационного запроса. Если ваш список в данный момент привязан к объектам, вам нужно выбрать ключ и затем найти это событие на второй странице, используя этот ключ.

...