Элемент WP8 не найден в LongListSelector

Я пытаюсь прокрутить до определенного элемента в LongListSelector, но мой longlistselector не может его найти и дает сбой, когда я вызываю функцию llsTest.ScrollTo(m).


C#:

public class MyItem 
{
    public string s1 {get;set;}
    public string z1 {get;set;}

}

List<MyItem> list= new List<MyItem>();
list.Add(new MyItem() { s1 = "First", z1 = "Second" });
list.Add(new MyItem() { s1 = "Third", z1 = "Fourth" });
list.Add(new MyItem() { s1 = "Fifth", z1 = "Sixth" });
list.Add(new MyItem() { s1 = "Sek8", z1 = "kj98" });
list.Add(new MyItem() { s1 = "lkdsj9", z1 = "lkdjo0" });
list.Add(new MyItem() { s1 = "jkdlhf", z1 = "98uifie" });
list.Add(new MyItem() { s1 = "Seventh11", z1 = "Eighth32" });
list.Add(new MyItem() { s1 = "Seventh45", z1 = "Eighth67" });
list.Add(new MyItem() { s1 = "Seventh86", z1 = "Eighth89" });
list.Add(new MyItem() { s1 = "Seventh6", z1 = "Eighth7" });
list.Add(new MyItem() { s1 = "Sevent4h", z1 = "Eighth8" });
list.Add(new MyItem() { s1 = "Seventh7i", z1 = "Eighthlp" });
list.Add(new MyItem() { s1 = "Seventh-09", z1 = "Eighth-0" });
list.Add(new MyItem() { s1 = "Seventh1q", z1 = "Eighthh65" });
list.Add(new MyItem() { s1 = "Second Last", z1 = "Last" });

MyItem m = new MyItem() { s1 = "Second Last", z1 = "Last" };

llsTest.ItemsSource = list;
llsTest.ScrollTo(m);  // **<========Crashes here, m cannot be found!**

Вот XAML:

<phone:LongListSelector Name="llsTest">
    <phone:LongListSelector.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <Run Text="{Binding s1}"/><LineBreak/>
                <Run Text="{Binding z1}"/>
            </TextBlock>
        </DataTemplate>
    </phone:LongListSelector.ItemTemplate>
 </phone:LongListSelector>

person user3656651    schedule 30.06.2014    source источник


Ответы (2)


Вместо того, чтобы передавать новый элемент в ScrollTo, передайте элемент из массива списка. Я вижу из кода, что вы хотите прокрутить до 15-го элемента. Итак, напишите код, как показано ниже:

llsTest.ScrollTo(list[15]);
person Hitesh    schedule 30.06.2014
comment
Ну, у меня нет информации об индексе заранее. Я хочу перейти к элементу на основе содержимого элемента. Это возможно? Я пробовал то же самое с простыми строками. Если селектор длинного списка заполнен простыми строками, scrollto работает нормально, как я его использовал. Но когда я использую элементы на основе класса, scrollto не работает. Любые идеи? - person user3656651; 30.06.2014
comment
В этом случае прокрутите свой список и найдите индекс элемента на основе его содержимого, до которого вы хотите прокрутить. А затем передайте индекс элемента для прокрутки, как показано в моем коде. - person Hitesh; 30.06.2014

MyItem m = new MyItem() { s1 = "Second Last", z1 = "Last" }; теперь после этой выше строки m никогда не добавляется в список. поэтому, очевидно, он выдаст исключение при попытке прокрутки к несуществующему элементу.

Обратите внимание, что каждый вызов new создает новый объект, поэтому даже если содержимое объектов одинаково, разные объекты никогда не будут одинаковыми.

поэтому объект передан в

list.Add(new MyItem() { s1 = "Second Last", z1 = "Last" }); 

не совпадает с объектом, созданным впоследствии.

MyItem m = new MyItem() { s1 = "Second Last", z1 = "Last" };

вам нужно позвонить list.Add(m) перед звонком llsTest.ScrollTo(m);

затем вы можете удалить лишний элемент, удалив строку list.Add(new MyItem() { s1 = "Second Last", z1 = "Last" });

person Ankit    schedule 30.06.2014
comment
Хорошо, это очень хорошо объясняет. Объекты не одинаковы, даже если ценности. Итак, в моем случае я хочу прокручивать на основе значений, содержащихся в объекте, а не конкретного экземпляра объекта. Эти значения хранятся в другом месте в файле isolatedstroage. Поэтому я думаю, что решение, представленное Hitesh, будет приемлемым, хотя мне придется отслеживать номер элемента в моем классе, чтобы я мог прокручивать его с помощью индекса к моему списку. - person user3656651; 30.06.2014