gpt4 book ai didi

ios - 如何使用 ReactiveUI 和 DynamicData 链接 SourceList 观察?

转载 作者:行者123 更新时间:2023-12-01 15:57:43 25 4
gpt4 key购买 nike

如果术语关闭,请道歉;我是一名 iOS 开发人员,必须使用 Xamarin.iOS 来开发应用程序。我正在使用带有 DynamicData 和 MVVM 架构的 ReactiveUI。总的来说,我对 RxSwift 和 FRP 概念相当满意。我有一个发布 SourceList<MyThing> 的模型,根据文档,如下所示:

// Property declarations
private readonly SourceList<MyThing> Things;
public IObservableCollection<MyThing> ThingsBindable { get; }

// Later, in the constructor...
Things = new SourceList<MyThing>();
// Is this of the right type?
ThingsBindable = new ObservableCollectionExtended<MyThing>();
Things
.Connect()
.Bind(ThingsBindable)
.Subscribe();

我可以成功使用 .BindTo()在我的 View (即 iOS 领域中的 ViewController)中获取 UITableView 以在模型更改时更新:
Model
.WhenAnyValue(model => model.ThingsBindable)
.BindTo<MyThing, MyThingTableViewCell>(
tableView,
new NSString("ThingCellIdentifier"),
46, // Cell height
cell => cell.Initialize());

我不想直接绑定(bind)到模型,而是让 ViewModel 订阅和发布(或以其他方式代理) SourceList<MyThing> ,或 this 的可绑定(bind)版本,以便 View 仅使用 ViewModel 属性。 SourceList声明为 private在文档中;我不确定这里的最佳实践:我是否将其公开并执行我的 Connect()在 View 模型中?或者有没有办法把公开曝光的 IObservableCollection<MyThing> ThingsBindable从 View 模型?我也不相信 ObservableCollectionExtended<MyThing>是 Bindable 属性的正确类型,但它似乎有效。

我尝试了 .ToProperty() 的各种组合, .Bind() , .Publish()等等,并在 ViewModel 中制作 View-binding Observable 的一个版本无济于事,现在我只是将自动完成功能扔到墙上,看看有什么效果。任何方向表示赞赏。 TIA。

最佳答案

我认为这是初学者的误解。这就是我想要的工作方式;也许它会帮助其他 Xamarin.iOS/ReactiveUI/DynamicData 新手。

在我的模型中,我声明了两个私有(private) SourceList和公开曝光的 IObservableList<MyThing> :

private readonly SourceList<MyThing> _ModelThings;
public IObservableList<MyThing> ModelThings;

然后在我的构造函数中实例化它们:
_ModelThings = new SourceList<MyThing>();
ModelThings = _Things.AsObservableList();

在我的 ViewModel 中,我声明了一个本地 ObservableCollectionExtended<MyThing>并将其绑定(bind)到模型的公共(public)属性:
public ObservableCollectionExtended<MyThing> ViewModelThings;

// Then, in the constructor:
ViewModelThings = new ObservableCollectionExtended<MyThing>();

model.ModelThings
.Connect()
.Bind(ViewModelThings)
.Subscribe();

在我的 ViewController 中,我将表格绑定(bind)到 ViewModel.ViewModelThings ,如问题。如果我想拥有另一个级别的模型,我可以简单地通过 Model.ModelThings.Connect().Bind()降低,正如格伦在评论中暗示的那样。

FWIW,我找到了 Roland's Blog (特别是 Observable Lists/Caches 部分)比 GitHub 文档更容易理解。

关于ios - 如何使用 ReactiveUI 和 DynamicData 链接 SourceList 观察?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55117343/

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