如何下载数据并在LongListSelector中显示?

时间:2013-11-09 00:29:41

标签: c# windows-phone-7 windows-phone-8 windows-phone longlistselector

我正在撰写新闻阅读器。我得到了JSON格式的数据集合,我希望在LongListSelector中显示它。

我遇到了两个问题:

我将JSON数据转换为这样的类:

public class User
{
    public string Username;
    public int Id;
    public string Permalink;
    public string Uri;
    public string Permalink_url;
    public string Avatar_url;
    // .. many more

    //Empty Constructor
    public User() { }
}

然后我应该将此类转换为ViewModel以在LongListSelector中显示绑定吗? (怎么样?)还是有更好的方法?

我们使用这样的视图模型,因此LongListSelector会在事情发生变化时通知。我应该逐一为所有上述属性写这样的内容吗?

public class ItemViewModel : INotifyPropertyChanged
{
    private string _lineOne;
    public string LineOne
    {
        get
        {
            return _lineOne;
        }
        set
        {
            if (value != _lineOne)
            {
                _lineOne = value;
                NotifyPropertyChanged("LineOne");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (null != handler)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

无论如何,获取json数据并在LongListSelector中表示并在需要时添加更多项目的最佳简单干净方法是什么?

2 个答案:

答案 0 :(得分:0)

我会创建一个UserViewModel,它将User DTO作为其构造函数中的参数并包装它。然后我会创建一个

ObservableCollection<UserViewModel> Users {get; set;} //use INotifyPropertyChanged
我的页面ViewModel中的

属性,并将此属性绑定到LongListSelector的ItemSource属性,如此

<LongListSelector ItemsSource="{Binding Users}"/>

如果您决定在用户​​滚动到最后时自动加载更多项目,您可以使用LongListSelector的ItemRealized事件来请求您的页面ViewModel加载更多项目。

答案 1 :(得分:0)

比如说。将LongListSelector的ItemsSource与名为items的ObservableCollection绑定。

<LongListSelector Name="list" ItemsSource="{Binding items}">
  .....
</LongListSelector>

现在,您需要填充此列表的数据。用户类将为您执行此任务。 使用Newtonsoft.Json库从json数据中获取JObject obj。

然后在屏幕上调用要显示数据的User类参数化构造函数。

User userObject = new User(obj);
list.DataContext = new ViewModel(userObject);

在User类中定义此构造函数,如下所示:

public User(JObject obj)
{
   this.UserName = (string)obj["UserName"];
   .....
   ....
}

现在您拥有UserObject,其中包含填充LongListSelector所需的所有数据。如果您希望以后更改某些数据,请在课程上使用INotifyPropertyChanged

public class ViewModel : INotifyPropertyChanged
{
   ObservableCollection<UserDetail> items = new ObservableCollection<UserDetail>();
   .....
   .....
   public ViewModel(User u)
   {
     UserDetail ud = new UserDetail(u);
     //assign your data to this view class here and finally add it to the collection
     .....
     .....

     items.Add(ud);
   }
}