Под SelectionChanged считывать базовые данные из списка - PullRequest
0 голосов
/ 02 апреля 2012

Я занят своим приложением, и у меня возникали некоторые проблемы, когда я нажимал на фотографию в своем списке PhotoFeed.

Я получил 1 List <> со строками UrlTumb и UrlFull.

У меня есть 1 ListBox с WrapPanel, заполненной изображениями, с помощью которого я устанавливаю Image.Source из моего UrlTumb.

В чем проблема, когда я нажимаю на фотографию в моем списке, я хочу перейти кНовая страница и отобразить там исходное изображение (UrlFull). Теперь я могу получить только свой UrlTumb из моего Image.Source, но я хочу, чтобы мой UrlFull сохранялся в Списке.Теперь мой вопрос, как мне получить UrlFull.Так как же я могу отследить, на каком элементе я нажал, и получить UrlFull из этого элемента, чтобы я мог отправить его с помощью NavigationService.Navigate

Я могу сделать это грязным способом и создать невидимый текстовый блок помимо изображения вмой ListBox и поместил туда UrlFull, но я бы хотел сделать это правильно

Так что же мне поместить в ?????место в этой строке

            NavigationService.Navigate(new Uri("/PhotoInfo.xaml?urlfull={0}", ????? , UriKind.Relative));

Привет Cn

1 Ответ

2 голосов
/ 02 апреля 2012

Существует несколько вариантов:

  1. Использовать индекс выбранного элемента listBox.SelectedIndex, чтобы получить индекс выбранного свойства, который будет соответствовать индексу в вашем источнике (это может быть не так, если вы фильтруете коллекцию).используя источник коллекции, но я думаю, что это не так)
  2. Использовать выбранный элемент listBox.SelectedItem это вернет SelectedItem, который будет содержать ваш объект.(Обратите внимание, что если выбран режим множественного выбора, будет возвращен только первый выбранный элемент)
  3. Использовать SelectemItems.Это позволит вам получить массив выбранных
    элементов (Примечание: обычно его следует использовать только в том случае, если для режима списка
    установлено несколько значений)
  4. Use SelectedValue, который будет содержатьзначение SelectedItem (это спасет вас и лишний шаг.
  5. Использовать аргументы события «Изменено выделение» AddedItems.

Ниже приведен фрагмент кода из трех вариантов выше. x,y, z все будут выбранными вами именами (например, «Майк»)

XAML:

<ListBox x:Name="lb"
         ItemsSource="{Binding Names}"
         SelectionChanged="NameChanged" />

Код позади:

    public class Person
    {
        public string Name { get; set; }

        public override string ToString()
        {
            return Name;
        }
    }

    private List<Person> people = new List<Person>
        {
            new Person{Name = "Lewis"},
            new Person{Name = "Peter"},
            new Person{Name = "Brian"}
        };

    public List<Person> People
    {
        get
        {
            return this.people;
        }
        set
        {
            this.people = value;
        }
    }

    private void NameChanged(object sender, SelectionChangedEventArgs e)
    {
        var x = this.people[lb.SelectedIndex];
        var y = lb.SelectedItem;
        var z = lb.SelectedItems[0];
        var h = lb.SelectedValue;

        var u = e.AddedItems[0];

        var person = e.AddedItems[0] as Person;
        if (person != null)
        {
            var result = person.Name;
        }
    }

Для различий между SelectedValue иSelectedItem см. Здесь SelectedItem против SelectedValue

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