Массив Json для выбора в формах Xamarin - PullRequest
0 голосов
/ 04 марта 2019

Сначала я сканирую код qr с помощью приложения, затем приложение отправляет запрос api, и я получаю json в своем ответе с моего сервера.

Я хочу получить json из моего api иотобразить его в сборщике в xaml, позвольте мне показать вам мой json

[{"srednica":"20","silowniki":[{"stroke":"25","id":"1222","price":"118.00"},{"stroke":"40","id":"1224","price":"121.60"},{"stroke":"75","id":"1542","price":"130.00"},{"stroke":"230","id":"1545","price":"167.20"},{"stroke":"275","id":"1546","price":"178.00"}]},{"srednica":"16","silowniki":[{"stroke":"125","id":"1223","price":"116.00"},{"stroke":"150","id":"1225","price":"119.00"},{"stroke":"80","id":"1537","price":"110.60"},{"stroke":"120","id":"1538","price":"115.40"}]},{"srednica":"25","silowniki":[{"stroke":"25","id":"1247","price":"126.75"},{"stroke":"180","id":"1556","price":"168.60"},{"stroke":"185","id":"1557","price":"169.95"},{"stroke":"220","id":"1558","price":"179.40"}]},{"srednica":"12","silowniki":[{"stroke":"40","id":"1373","price":"99.00"},{"stroke":"150","id":"1533","price":"110.00"},{"stroke":"200","id":"1534","price":"115.00"}]},{"srednica":"10","silowniki":[{"stroke":"10","id":"1384","price":"92.00"},{"stroke":"30","id":"1577","price":"94.00"}]}]

где «20» - это диаметр и должно быть уникальное значение, которое должно быть в 1-й сборщике, а во 2-м сборщике мне нужноУ меня есть ход, идентификатор и цена для этого соответствующего диаметра, например:

Я выбираю диаметр = 20, а во втором сборщике я получаю все удары из этого диаметра ((петля) dia ["20"] [i].Штрих <- вот как бы я это сделал в JavaScript ..). </p>

Вот моя модель, которую я получил отсюда https://app.quicktype.io/

public class Diameter : INotifyPropertyChanged
{
    [JsonProperty("srednica")]
    public string Srednica { get; set; }

    [JsonProperty("silowniki")]
    public List<Silowniki> Silowniki { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

public class Silowniki
{
    [JsonProperty("stroke")]
    public string Stroke { get; set; }

    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("price")]
    public string Price { get; set; }
}

Моя модель представления

    public class ScannedViewModel : INotifyPropertyChanged
    {
        public ObservableCollection<Silowniki> Silowniki { get; set; }
        public ObservableCollection<Diameter> Dia { get; set; }
        public Diameter SelectedDiameter { get; set; }
        public Diameter SelectedSilowniki { get; set; }
        public ScannedViewModel()
        {
            Silowniki = new ObservableCollection<Silowniki>();
            Dia = new ObservableCollection<Diameter>();
}

Мой ответ json здесь:

        var responseText = streamReader.ReadToEnd();
        if (response.StatusCode == HttpStatusCode.OK)
        {
            return responseText;

А вот как я добавляю json к диаметру, я сомневаюсь, что это правильный путь ..

ScannerPage.OnScanResult += (result) =>
            {
                ScannerPage.IsScanning = false;
                Device.BeginInvokeOnMainThread(async () =>
                {
                    await Navigation.PopAsync();
                    dynamic jsonRespone = await ConnectWithOauth.GetRequest(result.Text);
                    var test = JsonConvert.DeserializeObject<List<Diameter>>(jsonRespone);
                    ScannedProducts nextPage = new ScannedProducts(test);
                    //nextPage.BindingContext = viewModel;

                    Console.WriteLine("Mydia pomyslnie init");
                    await Navigation.PushAsync(nextPage);

И, наконец, вот мойxaml.

    <Picker Title="Test"
            x:Name="picker"
            ItemDisplayBinding="{Binding Silowniki.Id}">
    </Picker>
    <Picker Title="test"
            x:Name="kupa"
            ItemDisplayBinding="{Binding Silowniki.Stroke}">
    </Picker>
    <ListView 
        x:Name="ListaProduktow"  
        CachingStrategy="RecycleElement"
        RowHeight="60"
        ItemSelected="OnItemSelected">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <ContentView>
                        <Label Text="{Binding Srednica}">
                        </Label>
                    </ContentView>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Я привязываюсь к сборщику здесь на моей странице "ScannedProducts":

    public ScannedProducts(dynamic test)
    {
        InitializeComponent();
        picker.ItemsSource = test;
        kupa.ItemsSource = test;
        BindingContext = test;

Пожалуйста, помогитеЯ застрял в этом в течение последних 2 дней, и я действительно не знаю, что делать дальше ...

Отредактировал это сообщение 5.03

Что я хочудостигнуть: Получить "средницу" в 1 сборщике, и всякий раз, когда кто-то выбирает, например, "20", чтобы показать ему удар в сборщике 2-й соответствует этому "среднику" в json

Моя проблема: он показывает мне "средницу", но не показывает мне обводку и идентификатор. Я попытался с помощью средства выбора (закомментировав просмотр списка), но я получаю ошибку Java "Java.Lang.NullPointerException: попытка вызвать виртуальный метод 'Java.lang.String java.lang.Object.toString () '"

Я знаю, что JSON правильно десериализуется в модель, потому что я проверил, элементы есть, я думаю, я не знаю, какпокажите это в сборщике.

Скажите, что мне нужно сделать, чтобы сделать то, что я хочу достичь?

Редактировать:

Если я сделаю это в своем Page.cs:

    kupa.ItemsSource = model[0].Silowniki;

И в моем xaml:

<Picker Title="test"
        x:Name="kupa"
        ItemDisplayBinding="{Binding Stroke}">
</Picker>

Это показывает мне удар, но только дляэлемент 0, который есть :) Как мне сделать это следующим образом: «Средство выбора 1: выбрать средника« 20 », если его выбранный ход показа из silowniki (модель [thisSrednicaIndex] .Silowniki.Stroke) для средства выбора 2«

Или я должен сделать это в цикле за кодом страницы?

1 Ответ

0 голосов
/ 04 марта 2019

К сожалению, вы не понимаете некоторые основные вещи, и это нормально, что вы изучаете их в течение нескольких дней.

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

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