问题描述
我尝试使用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="󠂺"/>
</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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!