xamarin - MicroSchart 不允许 mvvm 绑定(bind)

标签 xamarin mvvm charts xamarin.ios

我尝试在我的 xamarin ios mvvm 应用程序中创建一个图表,它适用于硬编码数据。当我尝试从我的 api 设置数据时,它崩溃了,因为我的 View 在我的数据加载之前加载,所以它返回 null .
我确实绑定(bind)了它。

错误: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();

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

        _entries = entries;
        Entries = _entries;
    }

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

最佳答案

您的绑定(bind)表达式是错误的。您没有指定绑定(bind)的目标。由于 MvvmCross 没有针对此图 TableView 的任何内置目标绑定(bind)声明,因此它不知道目标是什么。我写了一篇关于这个问题的博客文章,你可以在这里找到:https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html

但这里的问题是:

set.Bind(chart.Entries)

绑定(bind)应该有View您试图绑定(bind)的不是目标。而是 Entries应使用 For() 指定链法:
set.Bind(chart).For(c => c.Entries)

现在您已经指定了目标。然后你可以使用 To()指定绑定(bind)的来源。
set.Bind(chart).For(c => c.Entries).To(vm => vm.Entries);

这仅适用于您的图表组件的 Entries property 是具有公共(public) getter 和 setter 的公共(public)属性。

关于xamarin - MicroSchart 不允许 mvvm 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50195398/

相关文章:

javascript - Highcharts 离线导出尝试从在线 cdn 加载库并出错

xamarin - 如何制作圆角入口控件 Xamarin.Forms

javascript - 使用 .NET/C# 与使用 HTML/JavaScript 构建 Android 应用程序

c# - 如何检查 PCL 项目 xamarin 中的服务器是否可达?

wpf - WPF 中的自定义向导控件添加和删除用户控件?

javascript - 如何让echart x轴类型时间显示一天的时间段

c# - Xamarin Forms 中没有 WebClient 类

android - 如何实现嵌套的实时数据?

c# - MVVM Light EventToCommand - 无法触发事件

c# - .net 图表 - 如何强制数据标签始终显示在曲线上方?