xaml - 将属性绑定到列表视图
问题描述
我有一个天气 VM,可以完美地获取我的城市和国家代码,但我正在尝试将其余数据绑定到 XAML。我所有的数据都存储在数组中,由于某种原因,当我循环时,变量 i 不会增加并且应用程序崩溃。
我也有icon的问题,我有一个list,就是我的Listview的itemsource,但是Icon在另一个数组上
我试图循环,并分配每个变量,循环总是崩溃
var splitedData = cityData.Split(",");
var city = splitedData[0];
var conutryCode = splitedData[1];
var data = await WeatherAPI.GetWeatherDataAsync(city, conutryCode);
if (data != null) {
for (int i = 0; i < data.list.Count; i++) {
rootObject.list[i].dt_txt = data.list[i].dt_txt;
rootObject.list[i].main.temp_max = data.list[i].main.temp_max;
rootObject.list[i].main.temp_min = data.list[i].main.temp_min;
rootObject.list[i].weather[i].icon
}
}
}
xml 列表视图
Margin="20" ItemsSource="{Binding rootObject.list}">
<ListView.ItemTemplate>
<DataTemplate>
<RelativePanel>
<TextBlock x:Name="dateTB"
Text="{Binding dt_txt}"
RelativePanel.RightOf="iconTB"
RelativePanel.AlignTopWith="iconTB" />
<TextBlock x:Name="highTB"
Text="{Binding main.temp_max}"
RelativePanel.RightOf="iconTB"
RelativePanel.Below="dateTB"
FontSize="10" />
<TextBlock x:Name="lowTB"
RelativePanel.RightOf="highTB"
RelativePanel.Below="dateTB"
FontSize="10"
Text="{Binding main.temp_min}"
Margin="10,0,0,0" />
<Image x:Name="iconTB"
Source="{}"
Height="30"
Width="30"
/>
</RelativePanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我预计日期会出现,最高价会出现,最低价会出现。
另外我不知道如何绑定图标,因为图标在 Weather,而不是 RootObject 列表中,这是我列表的 itemsource
解决方案
我在我身边尝试了你的代码,发现可能是原因。问题可能是您没有为主要对象或天气列表或日期列表创建实例。因此,您将值分配给 null 然后它会给出错误。
我稍微改了一下,你可以在你身边试试。(我还是不能用MapLocator.GetCityData();
所以我没有用真实数据尝试过。)
public class RootObject : Notify
{
private List<Day> _list;
public List<Day> list
{
get { return _list; }
set
{
if (value != _list)
{
_list = value;
onPropertyChanged("list");
}
}
}
public RootObject()
{
//I added five objects for test. In real scenario, the count depends on the data number you get
list = new List<Day>();
list.Add(new Day());
list.Add(new Day());
list.Add(new Day());
list.Add(new Day());
list.Add(new Day());
}
}
public class Day : Notify
{
private Main _main;
public Main main
{
get { return _main; }
set
{
if (value != _main)
{
_main = value;
onPropertyChanged("main");
}
}
}
private List<Weather> _weather;
public List<Weather> weather
{
get { return _weather; }
set
{
if (value != _weather)
{
_weather = value;
onPropertyChanged("weather");
}
}
}
private string _dt_txt;
public string dt_txt
{
get { return _dt_txt; }
set
{
if (value != _dt_txt)
{
_dt_txt = value;
onPropertyChanged("dt_txt");
}
}
}
public Day()
{
main = new Main();
//I added five objects for test. In real scenario, the count depends on the data number you get
weather = new List<Weather>();
weather.Add(new Weather());
weather.Add(new Weather());
weather.Add(new Weather());
weather.Add(new Weather());
weather.Add(new Weather());
}
}
对于本地测试,我只添加了 5 个对象。在您的真实场景中,您需要检查来自 bingmap 的数据计数。
推荐阅读
- docker - 从共享缓存同时安装两个项目时,CI 上的 composer 拒绝访问
- d3.js - D3js工具提示位置nxt到光标
- c - 在哪个块中是指向创建的数组的指针
- visual-studio - Visual Studio 命令行参数字段替换为应用程序参数
- python - 在 Barplot PLotly 上添加一条线
- python - 弹性转码器 - 输入文件元数据?
- python - Selenium 与 Python,脚本运行但没有任何反应
- python - 我的 Django Nginx 配置有什么问题?
- c# - 如何在 c# 中更改/设置 webview 的下载默认位置
- javascript - 谷歌身份验证按钮仅在第二次点击后登录 - 反应