- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我们的应用程序中,我们使用 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/
在我们的应用程序中,我们使用 ReactiveUI 来遵循 MVVM 模式。在一个 View 中,我们想要显示一个 UITableView。数据通常传递给 UITableView.Source 但对于
我是一名优秀的程序员,十分优秀!