привязать свойства к списку - PullRequest
0 голосов
/ 04 октября 2019

У меня есть виртуальная машина Weather, которая отлично получает код города и страны, но я пытаюсь связать оставшиеся данные с XAML. Все мои данные хранятся в массиве, и по какой-то причине, когда я зацикливаюсь, переменная i не увеличивается и происходит сбой приложения.

У меня также есть проблема со значком, у меня есть список,это источник элементов моего ListView, но значок находится в другом массиве

Я пытался зациклить и назначить каждую переменную, и цикл всегда вылетал

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

xaml listView

                  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>

Я ожидаю появления дат, появления максимума и появления минимума.

Кроме того, у меня нет понятия о том, как связать значок, потому что значок находится вПогода, а не список RootObject, который является источником элементов моего списка

1 Ответ

0 голосов
/ 04 октября 2019

Я попробовал ваш код на моей стороне и нашел, что что-то может быть причиной. Проблема может заключаться в том, что вы не создали экземпляры для основного объекта, списка погоды или списка дней. Таким образом, вы присваиваете значения 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...