WinPhone С# Отправить идентификатор в окно с помощью selector.SelectedItem

Привет, я дал список (названный источник) объектов (собака (идентификатор, имя)) моему селектору:

selector.ItemsSource = source.Select(obj => obj.Name).ToList();

Этот код работает и показывает имена собак. Теперь я хочу отправить идентификатор выбранной собаки в следующие окна, в которых отображаются сведения о моей собаке, я пытаюсь сделать что-то вроде этого, но это не работает:

NavigationService.Navigate(new Uri("/categ.xaml?doggyDetails=" + selector.SelectedItem.Select(obj => obj.Id),   UriKind.Relative));

person user3627729    schedule 12.05.2014    source источник
comment
это LongListSelector или LongListMultiSelector?   -  person halil    schedule 12.05.2014
comment
Каждое имя уникально. Это LongListSelector.   -  person user3627729    schedule 12.05.2014


Ответы (1)


Вы передаете список имен в качестве источника элемента, а затем ожидаете получить SelectedItem.Id обратно. Этого нельзя делать..

РЕДАКТИРОВАТЬ (не видел, чтобы у вас был словарь в качестве источника)

я бы создал класс

class Dog
{
     public string Name {get;set;}
     public Guid Id {get;set;}
}

Попробуй это:

 var dogs = from s in source
            select new Dog
            {
                 Name = s.Name,
                 Id = s.Id
            }

selector.ItemsSource = dogs.ToList();

И тогда вы получаете товар как

var itemId = (selector.SelectedItem as Dog).Id
NavigationService.Navigate(new Uri("/categ.xaml?doggyDetails=" + itemId,   UriKind.Relative));

Однако вам нужно будет привязать свое текстовое поле или что-то еще к свойству Name в xaml, например:

<ListBox>
    <ListBox.ItemTemplate>
         <DataTemplate>
             <TextBlock Text = {Binding Name}/>
         </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
person Ivan Crojach Karačić    schedule 12.05.2014
comment
Если я сделаю это: selector.ItemsSource = source.ToList(); селектор не показывает мне имена собак. - person user3627729; 12.05.2014
comment
Какой селектор вы используете? - person Ivan Crojach Karačić; 12.05.2014
comment
Большое спасибо за вашу помощь. Я использую LongListSelector. У меня есть ссылка на нулевое исключение для этой строки: var itemId = (selector.SelectedItem as dog).Id, я не понимаю, почему. Я пытаюсь напечатать все элементы собак, которые заполняют селектор, и нет нулевого элемента. - person user3627729; 12.05.2014
comment
Что вы можете сделать, так это прикрепить событие SelectionChanged в xaml, а затем использовать «отправителя» для получения вашего элемента. Это будет что-то вроде «var item = (sender as LongListSelector).SelectedItem», а затем вы можете выполнить кастинг, чтобы получить свой элемент - person Ivan Crojach Karačić; 12.05.2014
comment
Я буду использовать это: 'var item = (sender as LongListSelector).SelectedItem' Спасибо всем, что нашли время, чтобы помочь мне :) - person user3627729; 12.05.2014
comment
Если мой ответ действительно помог вам, я был бы очень признателен, если бы вы отметили его как ответ :) и добро пожаловать в ТАК :) - person Ivan Crojach Karačić; 12.05.2014
comment
Это мой первый пост в stackoverflow, я не знаю, где мне нужно щелкнуть, чтобы пометить его как ответ ^^ Когда я нажимаю на стрелку, он говорит мне: для голосования требуется 15 репутаций. - person user3627729; 12.05.2014
comment
под стрелками вверх-вниз вы видите галочку. когда вы нажимаете на нее, этот пост получает правильный ответ :) - person Ivan Crojach Karačić; 13.05.2014