将对象的List属性绑定到ListView [英] Bind a List property of an object to a ListView

查看:61
本文介绍了将对象的List属性绑定到ListView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用openweathermap API(预测为5天).我已经将json转换为C#代码,如下所示:

I try to work with the openweathermap api (5 days forecast). I've generated the json to C# code which looks like this:

[DataContract]
public class Main
{
    [DataMember]
    public double temp { get; set; }
    [DataMember]
    public double temp_min { get; set; }
    [DataMember]
    public double temp_max { get; set; }
    [DataMember]
    public double pressure { get; set; }
    [DataMember]
    public double sea_level { get; set; }
    [DataMember]
    public double grnd_level { get; set; }
    [DataMember]
    public int humidity { get; set; }
    [DataMember]
    public double temp_kf { get; set; }
}

[DataContract]
public class Weather
{
    [DataMember]
    public int id { get; set; }
    [DataMember]
    public string main { get; set; }
    [DataMember]
    public string description { get; set; }
    [DataMember]
    public string icon { get; set; }
}

[DataContract]
public class Clouds
{
    [DataMember]
    public int all { get; set; }
}

[DataContract]
public class Wind
{
    [DataMember]
    public double speed { get; set; }
    [DataMember]
    public double deg { get; set; }
}

[DataContract]
public class Sys2
{
    [DataMember]
    public string pod { get; set; }
}

/*public class Rain
{
    public double __invalid_name__3h { get; set; }
}*/

[DataContract]
public class List
{
    [DataMember]
    public int dt { get; set; }
    [DataMember]
    public Main main { get; set; }
    [DataMember]
    public List<Weather> weather { get; set; }
    [DataMember]
    public Clouds clouds { get; set; }
    [DataMember]
    public Wind wind { get; set; }
    [DataMember]
    public Sys2 sys { get; set; }
    [DataMember]
    public string dt_txt { get; set; }
    //public Rain rain { get; set; }
}

[DataContract]
public class RootObject
{
    [DataMember]
    public City city { get; set; }
    [DataMember]
    public string cod { get; set; }
    [DataMember]
    public double message { get; set; }
    [DataMember]
    public int cnt { get; set; }
    [DataMember]
    public List<List> list { get; set; }
}

然后,在我拥有保存所有数据预测的RootObject之后,我尝试将前十个温度的列表绑定到ListView.

Then after I have my RootObject which holds all the data forecast I try to bind a list of the first ten temperatures to a ListView.

public sealed partial class MainPage : Page
{

    private List<double> TemperatureObjects;
    private ObservableCollection<RootObject> WeatherObjects;

我的XAML如下:

  <ListView Grid.Row="2" ItemsSource="{x:Bind WeatherObjects}">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="local:RootObject">
                <StackPanel Orientation="Vertical">
                    <TextBlock>
                        <Run Text="{x:Bind Temp}"/>
                        <Run Text="&#xE00BA;"/>
                    </TextBlock>

                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

您能告诉我一些有关此问题的帮助吗?谢谢

Can you show me some help for this issue? thanks

推荐答案

就目前而言,我至少需要纠正三件事:

As for now I see at least three things you need to correct:

  • 在您的MainPage中实现INotifyPropertyChanged,例如:

  • implement INotifyPropertyChanged in your MainPage, for example like this:

public partial class MainPage: Page, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private void RaiseProperty(string name) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));

  • 您绑定的对象应该是公共属性:

  • your objects which you bind to, should be public properties:

    private ObservableCollection<RootObject> weatherObjects;
    
    public ObservableCollection<RootObject> WeatherObjects
    {
        get { return weatherObjects; }
        set { weatherObjects= value; RaiseProperty(nameof(WeatherObjects)); }
    }
    

  • 根据您的代码,您可能还需要从默认的 OneTime 更改绑定的模式:

    <ListView Grid.Row="2" ItemsSource="{x:Bind WeatherObjects, Mode="OneWay"}">
    

  • 您无需像使用 x:Bind 那样设置 DataContext .

    You don't need to set the DataContext as you are using x:Bind.

    这篇关于将对象的List属性绑定到ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆