【问题标题】:how to use pull to refresh facility in listbox for windows phone 7 application如何在 Windows Phone 7 应用程序的列表框中使用拉动刷新工具
【发布时间】:2014-02-11 13:31:21
【问题描述】:

我正在构建一个应用程序,我可以在其中从 Web 服务获取列表框中的数据。我需要使用刷新工具,以便当我使用该页面时出现新数据时,它应该自动刷新,而不是再次调用 Web 服务。下面给出了我的 xaml 和 cs 代码。请帮忙。

Xaml:

<ListBox Name="listBox1" SelectionChanged="listBox1_SelectionChanged"  Height="676" VerticalAlignment="Bottom">

 <ListBox.ItemTemplate>
    <DataTemplate>
         <Button IsHitTestVisible="False">
           <Button.Content>
              <ScrollViewer HorizontalScrollBarVisibility="Auto" Height="80" Width="400">
                <StackPanel Orientation="Horizontal" Margin="0,0,0,0">
                     <Image Source="{Binding ImageBind }" Height="90" Width="95"/>
                          <StackPanel Orientation="Vertical">
                            <TextBlock Text="{Binding Path=News_Title}" TextWrapping="Wrap"></TextBlock>

       <TextBlock Text="{Binding Path=Date_Start}" TextWrapping="Wrap" ></TextBlock>
           </StackPanel>
                </StackPanel>
                  </ScrollViewer>
                     </Button.Content>
                   </Button>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

我的cs文件:

 public class Newss
    {
        public string News_Title { get; set; }
        public string News_Description { get; set; }
        public string Date_Start { get; set; }
        public string image_path { get; set; }
        public BitmapImage ImageBind{get;set;}

      }

    public const string NewssXml = "Newss.xml";

    public News()
    {
        InitializeComponent();
        LoadData();
    }

    private void LoadData()
    {
        bool isSuccess;
        //try to load data from iso store
        var doc = ReadXml(out isSuccess);
        if (isSuccess) PopulateList(doc);
        //if failed (data doesn't exists in iso store), download data from web service
        else
        {
            KejriwalService.aapSoapClient client = new KejriwalService.aapSoapClient();
            client.getarvindNewsCompleted += new EventHandler<KejriwalService.getarvindNewsCompletedEventArgs>(client_getarvindNewsCompleted);
            client.getarvindNewsAsync();

            progressName.Visibility = System.Windows.Visibility.Visible;
        }
    }

    //upon download completed, display data then save the xml to iso store
    void client_getarvindNewsCompleted(object sender, KejriwalService.getarvindNewsCompletedEventArgs e)
    {
        var doc = XDocument.Parse(e.Result);
        PopulateList(doc);
        WriteXml(doc);
    }

    private void PopulateList(XDocument doc)
    {
        List<Newss> listData = new List<Newss>();

        progressName.Visibility = System.Windows.Visibility.Collapsed;

        foreach (var location in doc.Descendants("UserDetails"))
        {
            Newss data = new Newss();
            data.News_Title = location.Element("News_Title").Value;
            data.News_Description = location.Element("News_Description").Value;
            data.Date_Start = location.Element("Date_Start").Value;
            data.image_path = location.Element("image_path").Value;
            data.ImageBind = new BitmapImage(new Uri(@"http://political-leader.vzons.com/ArvindKejriwal/images/uploaded/" + data.image_path, UriKind.Absolute));
            listData.Add(data);
        }
        listBox1.ItemsSource = listData;
    }

    private XDocument ReadXml(out bool isSuccess)
    {
        isSuccess = false;
        var doc = new XDocument();
        using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
        {
            try
            {
                if (store.FileExists(NewssXml))
                {
                    using (var sr = new StreamReader(new IsolatedStorageFileStream(NewssXml, FileMode.OpenOrCreate, store)))
                    {
                        doc = XDocument.Load(sr);
                    }
                    isSuccess = true;
                }
            }
            catch (Exception ex) { }
        }
        return doc;
    }

    private bool WriteXml(XDocument document)
    {
        using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
        {
            try
            {
                using (var sw = new StreamWriter(new IsolatedStorageFileStream(NewssXml, FileMode.Create, store)))
                {
                    sw.Write(document.ToString());
                }
            }
            catch (Exception ex) { return false; }
        }
        return true;
    }

    private void Image_Back(object sender, RoutedEventArgs e)
    {
        NavigationService.Navigate(new Uri("/AAP.xaml", UriKind.Relative));
    }

    private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        // If selected index is -1 (no selection) do nothing

        if (listBox1.SelectedIndex == -1)
            return;

        Newss news = listBox1.SelectedItem as Newss;
        NavigationService.Navigate(new Uri("/NewsDetails.xaml?News_Title=" + news.News_Title + "&News_Description=" + news.News_Description +"&Date_Start=" +news.Date_Start + "&image_path=" + news.image_path, UriKind.Relative));

        // Reset selected index to -1 (no selection)
        listBox1.SelectedIndex = -1;
    }




 }

}

【问题讨论】:

  • Pull-to-refresh 是一种 iOS 范例。将刷新按钮添加到ApplicationBar
  • 不,不是。这是一个移动的概念。 IOS 没有开箱即用的功能。这是第三方的东西,已经成为许多平台的标准,因为它在移动设备上运行得非常棒。你甚至可以看到微软在 WP 上制作的应用程序使用它。

标签: c# xaml windows-phone-7


【解决方案1】:

在此处查看我的博文:http://www.sharpgis.net/post/2011/04/03/RefreshBox-for-Windows-Phone-7.aspx 请注意这项工作在 WP7 上,但如果为 WP8 编译(为 wp7 编译并在 wp8 上运行很好),则运行不佳。

【讨论】:

  • 任何人都可以为我在上面发布的我的应用程序编写一些代码以利用拉动刷新吗?
  • @har07 你能帮我解决这个问题吗?
猜你喜欢
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
相关资源
最近更新 更多