【问题标题】:Bind a List property of an object to a ListView将对象的 List 属性绑定到 ListView
【发布时间】:2017-04-08 12:15:09
【问题描述】:

我尝试使用 openweathermap api(预测 5 天)。我已经将 json 生成为 C# 代码,如下所示:

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

你能帮我解决这个问题吗?谢谢

【问题讨论】:

  • 请显示负责绑定和设置数据上下文的代码,说明您是否使用了公共属性和INotifyPropertyChanged。否则你的问题太宽泛了。
  • Binding 适用于公共属性,因此您需要将行更改为至少 public ObservableCollection&lt;RootObject&gt; WeatherObjects {get;set;}; 并且您的 MainPage 应该实现 INotifyPropertyChanges 并且您应该在设置属性后引发 RaisePropertyChanged 事件。
  • 好的。谢谢,我会这样做的

标签: c# xaml data-binding uwp


【解决方案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)); }
    }
    
  • 根据您的代码,您可能还需要从默认的 OneTime 更改绑定模式:

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

你不需要像使用x:Bind一样设置DataContext

【讨论】:

    猜你喜欢
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2020-06-22
    • 2011-05-28
    • 2011-10-03
    • 2018-10-24
    • 2015-07-24
    相关资源
    最近更新 更多