我正在撰写新闻阅读器。我得到了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
中表示并在需要时添加更多项目的最佳简单干净方法是什么?
答案 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);
}
}