2016-11-24 84 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

相關問題