2016-11-24 86 views
-1

我尝试使用openweathermap API(5天预测)。我已经生成的JSON的C#代码如下所示:将对象的列表属性绑定到ListView

[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。

编辑:

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> 

你能否告诉我这个问题的一些帮助?感谢

+0

请显示负责绑定和设置datacontext的代码,指定是否使用了公共属性和INotifyPropertyChanged。否则你的问题太广泛了。 – Romasz

+0

绑定工程与公共属性,所以你需要改变行至少'公共ObservableCollection WeatherObjects {get; set;};'你的MainPage应该实现INotifyPropertyChanges,你应该设置属性后RaisePropertyChanged事件。 – Romasz

+0

好的。谢谢我会那样做 – axcelenator

回答

1

至于现在,我看到至少有三件事情你需要纠正:

  • 在你的MainPage执行INotifyPropertyChanged,例如像这样:

    public partial class MainPage: Page, INotifyPropertyChanged 
    { 
        public event PropertyChangedEventHandler PropertyChanged; 
    
        private void RaiseProperty(string name) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); 
    
  • 你,你将对象绑定应该是公共属性:

    private ObservableCollection<RootObject> weatherObjects; 
    
    public ObservableCollection<RootObject> WeatherObjects 
    { 
        get { return weatherObjects; } 
        set { weatherObjects= value; RaiseProperty(nameof(WeatherObjects)); } 
    } 
    
  • 这取决于你的代码,你可能还需要从更改绑定的模式,默认的一次性

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

你不需要为你使用x:Bind设置的DataContext

相关问题