MicroSchart не позволяет связывать mvvm - PullRequest
0 голосов
/ 06 мая 2018

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

ошибка: Value cannot be null.

просмотр (в viewdidload):

 MvxFluentBindingDescriptionSet<UserCoinsTableView, UserCoinViewModel> set = new MvxFluentBindingDescriptionSet<UserCoinsTableView, UserCoinViewModel>(this);

        var control = new MvxUIRefreshControl();
        TableView.AddSubview(control);
        var entries = new[]
         {
            new Entry(1)
            {

            },
            new Entry(1)
            {

            }                
        };

        //var chart = new LineChart() { Entries = entries };
        var chart = new LineChart() { Entries = (this.ViewModel as UserCoinViewModel).Entries };

        var chartView = new ChartView
        {
            Frame = new CGRect(0, 32, this.View.Bounds.Width, 160),
            AutoresizingMask = UIViewAutoresizing.FlexibleWidth,
            Chart = chart
        };

        this.headerView.AddSubview(chartView);
        set.Bind(chart.Entries).To(vm => vm.Entries);
        set.Apply();

ViewModel:

    public async void LoadData()
    {
        var entries = _CoinHistory.Select(x => new Entry(float.Parse(x.price_btc))).ToArray();

        _entries = entries;
        Entries = _entries;
    }

dataprops:

    private IEnumerable<Entry> _entries;
    public IEnumerable<Entry> Entries
    {
        get
        {
            return _entries;
        }
        set
        {
            _entries = value;
            RaisePropertyChanged(() => Entries);
        }
    }

1 Ответ

0 голосов
/ 06 мая 2018

Ваше обязательное выражение неверно. Вы не указали цель привязки. Поскольку MvvmCross не имеет встроенных объявлений Target Binding для этого представления диаграммы, он не знает, какова цель. Я написал сообщение в блоге по этому вопросу, которое вы можете найти здесь: https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html

Но проблема здесь в следующем:

set.Bind(chart.Entries)

У привязки должно быть View, которое вы пытаетесь связать, а не Цель. Вместо этого Entries должен быть указан цепным методом For():

set.Bind(chart).For(c => c.Entries)

Теперь вы указали цель. Затем вы можете использовать To() для указания источника привязки.

set.Bind(chart).For(c => c.Entries).To(vm => vm.Entries);

Это будет работать только в том случае, если свойство Entries компонента диаграммы является публичным свойством с общедоступными методами получения и установки.

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