gpt4 book ai didi

mvvm - ReactiveTableViewSource 是如何工作的?

转载 作者:行者123 更新时间:2023-12-01 16:33:36 28 4
gpt4 key购买 nike

在我们的应用程序中,我们使用 ReactiveUI 来遵循 MVVM 模式。在一个 View 中,我们想要显示一个 UITableView。数据通常传递给 UITableView.Source 但对于 ReactiveUI 我们使用 ReactiveTableViewSource<TSource> .

我不明白的是如何将我在 View 模型中获得的数据绑定(bind)到 ReactiveList 中。到 ReactiveTableViewSource .

我们现在拥有的是在 UIView 中创建一个表,如下所示:

Table = new UITableView(UIScreen.MainScreen.Bounds);
Table.Source = new TableSource(Table, MyReactiveList, (NSString) CellIdentifier, _cellHeight, cell => Debug.WriteLine(cell));

顺便说一句:单元格操作的用途是什么?

此外,我们还有一个 Table 源类,如下所示:

internal sealed class TableSource : ReactiveTableViewSource<MyListObject>
{
public TableSource(UITableView tableView, IReactiveNotifyCollectionChanged<MyListObject> collection, NSString cellKey, float sizeHint, Action<UITableViewCell> initializeCellAction = null) : base(tableView, collection, cellKey, sizeHint, initializeCellAction)

在我的 View 模型中,我有一个正在更新我的 ReactiveList 的服务。它看起来像这样:

public sealed class MyService : ReactiveObject, IMyService
{
public IReactiveList<MyListObject> MyReactiveList { get; }

public async Task UpdateMyReactiveListAsync() {//...}

我在哪里将表源绑定(bind)到 ReactiveList?我在哪里订阅事件?是否有任何我可能遗漏的文档或示例代码?

最佳答案

使用 ReactiveTableViewSource 非常简单:

只需将 List 与您的 UITableView 连接

var tableView = new UITableView ();

// Bind the List agains the table view
// SampleObject is our model and SampleCell the cell
ViewModel.WhenAnyValue (vm => vm.Items).BindTo<SampleObject, SampleCell> (tableView, 46, cell => cell.Initialize());

然后创建一个自定义单元格,您可以在其中将模型数据绑定(bind)到单元格。

public class SampleCell : ReactiveTableViewCell, IViewFor<SampleObject>
{
public SampleCell () : base() { }
public SampleCell (IntPtr handle) : base(handle) { }

private SampleObject _viewModel;
public SampleObject ViewModel
{
get { return _viewModel; }
set { this.RaiseAndSetIfChanged (ref _viewModel, value); }
}

object IViewFor.ViewModel
{
get { return ViewModel; }
set { ViewModel = value as SampleObject; }
}

public void Initialize()
{
this.WhenAnyValue (v => v.ViewModel.Name).BindTo (
this,
v => v.TextLabel.Text);
}
}

您可以在此处找到一个引人注目的示例:https://github.com/reicheltp/ReactiveTableViewSource-Sample

2016/03/09 更新:最好在单独的 Initialize 方法中进行绑定(bind)以防止多次调用。

如果你有更多问题可以在推特上问我:@reicheltp

关于mvvm - ReactiveTableViewSource<TSource> 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35750732/

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