gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:32:42 25 4
gpt4 key购买 nike

我尝试在我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com