0

我正在开发一个新闻阅读器。我得到一组 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() { }
}

那么我应该将此类转换为 aViewModelLongListSelector通过绑定显示它吗?(如何?)还是有更好的方法?

我们使用这样的视图模型,以便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数据并将其表示为aLongListSelector并在需要时添加更多项目的最佳简单清洁方法是什么?

4

2 回答 2

0

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

ObservableCollection<UserViewModel> Users {get; set;} //use INotifyPropertyChanged

我的页面 ViewModel 中的属性并将此属性绑定到 LongListSelector 的 ItemSource 属性,如下所示

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

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

于 2013-11-09T02:39:57.397 回答
0

比如说。您将 LongListSelector 的 ItemsSource 与称为项目的 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"];
   .....
   ....
}

现在您拥有了包含填充 LongListSelector 所需的所有数据的 UserObject。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);
   }
}
于 2013-11-09T06:05:20.270 回答