0

自動的にロード可能な listBox を実装する方法を教えてください。要素を下にスクロールすると、前の要素に追加する必要があります。残念ながら、そのようなリストの例は見つかりませんでした。ネットワークでは ObservalableCollection を使用するように勧められていることがわかりましたが、コレクションに要素を追加する方法がわかりません。これが私の十分なテストアプリケーションです。

Web サービスに接続し、xml 解析から取得する必要があります。このようなリクエストがhttp://beta.sztls.ru/mapp/eps/?count=10の場合、Web サービスでの作業の例を次に示します。このようなリクエストhttp://beta. sztls.ru/mapp/eps/?count=10&skip=10、次の 10 のニュースを含む xml を返します クラスがあります

public class Item
    {
        public string Description { get; set; }
        public string Title { get; set; }
        public string Image { get; set; }
    }

そしてコードビハインドで

public partial class MainPage : PhoneApplicationPage
    {
        private ObservableCollection<Item> _collection;
        public ObservableCollection<Item> Collection
        {
            get
            {
                if (_collection == null)
                {
                    _collection = new ObservableCollection<Item>();
                }
                return _collection;
            }
        }

        private int endIndex = 0;

        // Конструктор
        public MainPage()
        {
            InitializeComponent();
            this._collection = new ObservableCollection<Item>();

            this.listBox1.ItemsSource = Collection;
            this.listBox1.Loaded += new RoutedEventHandler(listBox1_Loaded);

        }

        void listBox1_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                LoadItems(10);
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.StackTrace);

            }
        }

        private void LoadItems(int count)
        {
            WebClient webClient = new WebClient();
            webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
            webClient.DownloadStringAsync(
                new Uri(String.Format("http://beta.sztls.ru/mapp/eps/" + "?count={0}" + "&skip={1}" + "&ticks={2}",
                                      count, this.endIndex, DateTime.Now.Ticks)));
                 this.endIndex+=count
        }

        void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                ParseResult(e.Result);
            }
        }

        private void ParseResult(string result)
        {
            XElement element = XElement.Parse(result);



            var res = from part in element.Descendants("news")
                      select new Item
                                 {
                                     Image = part.Element("image_url").Value,
                                     Title = part.Element("title").Value,
                                     Description = part.Element("description").Value
                                 };

           //Here,as far as I understand, I need like this Collection.Add(res)
        }
    }

Xamlで

<toolkit:LongListSelector Grid.Row="1" IsFlatList="True" x:Name="listBox1">
                <toolkit:LongListSelector.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                        <Image Source="{Binding Image}" Width="100" Height="100"/>
                            <StackPanel>
                                <TextBlock Text="{Binding Title}" FontSize="22" Foreground="Red"/>
                                <TextBlock Text="{Binding Decription}" FontSize="26" Foreground="Blue"/>
                            </StackPanel>
                        </StackPanel>
                    </DataTemplate>

                </toolkit:LongListSelector.ItemTemplate>
                <toolkit:LongListSelector.ListFooterTemplate>
                    <DataTemplate>
                        <TextBlock x:Name="footer"/>
                    </DataTemplate>
                </toolkit:LongListSelector.ListFooterTemplate>
            </toolkit:LongListSelector>

また、新しいアイテムの読み込みリクエストを送信する必要がある時間を追跡するにはどうすればよいですか?

助けてくれてありがとう、私の英語でごめんなさい。http://www.bing.com/translator =)を使用しました

4

1 に答える 1

0

大丈夫。私がすべてを正しく理解していれば、xml ファイルからアイテムのコレクションを生成する必要があります。あなたにとって最良の選択肢は、「画像」、「タイトル」、「説明」などのフィールドを持つエンティティクラスを作成し(すでに行っています)、ParseResult()メソッドでこのエンティティのコレクションを作成することです. 次のようになります。

List<Entity> list = ParseResult(xdoc);

ParseResult では、次のような式を使用して xml ファイルからデータを取得します。

return (from node in xdoc.Descendants("something") select new Entity(node.Attribute("Title").Value, node.Attribute("Image").Value,... ).ToList();

これでアイテムのコレクションができました。次に彼らと何をしたいですか?それを使ってUIを作成すると思います。このコレクションを使用して生成されたいくつかのコントロールがあると思います。したがって、このページを更新して新しいコントロールを追加する場合は、どのコントロールがページに既に追加されているかを確認する必要があります。この場合、これをチェックするユーザー コントロールにフィールドを作成することをお勧めします。一意でなければならないので、「タイトル」にしましょう。追加したいものとして「タイトル」。

希望、私はすべて正しいことを理解しました。


Alexandr、次のような item エンティティのコンストラクターが必要なだけです

public Item(string desc, string title, string image)
        {
            this.Description = desc;
            this.Title = title;
            this.Image = image;
        }

次に、リストをはるかに簡単に埋めることができます。

List<Item> list = (from node in xdoc.Descendants("news") select new Item(node.Element("description").Value, node.Element("title").Value, node.Element("image_url").Value)).ToList();

それはうまくいくはずです。

于 2012-11-20T11:43:44.833 に答える