2

我正在尝试将 a 绑定UITableViewObservableCollection<MyTypeViewModel>using MvxStandardTableViewSource,但出现了奇怪的行为和无法正常工作的绑定

(部分)代码是这样的:

tblFeatures = new UITableView ();
mSource = new MvxStandardTableViewSource(tblFeatures, "TitleText Name");

var set = this.CreateBindingSet<MyTypeView, MyTypeViewModel> ();

set.Bind(mSource).To (vm => vm.Objects);
set.Bind(mSource).For(s => s.SelectedItem).To (vm => vm.SelectedObject);

set.Apply ();

我看到的是,当我在中选择一个项目时,它确实会更新SelectedObject为新值。但是当我SelectedObject通过其他方式进行更改时,表格不会更新显示的选定项目。我已经通过设置断点并将另一个控件绑定到它来验证SelectedObject真的正在改变;另一个控件(标签)会随着选择的变化而变化,但UITableView不会。

我做错了什么,或者这可能是 MVVMCross 中的问题吗?

4

2 回答 2

2

selecteditem 绑定被请求为“很高兴拥有”,主要是针对用户单击列表项的用户故事请求的 - 所以这是目前的“获取来源的一种方式”实现。

非常基本的细节和一些代码可以通过 - https://github.com/slodge/MvvmCross/issues/278找到

事实上,当前的绑定正在滥用“选择”范式——因为它并没有真正反映单元格的选择状态,也没有处理多选——相反,它只是让视图模型知道最新的点击项目。

如果有真正的用户故事/完全双向绑定的要求,那么这些应该是可添加的 - 例如,如果用户故事用于将项目滚动到视图中,则可以使用“scrollToRowAt” - 请参阅如何将 UITableView 滚动到特定位置-但这又可能不是 uitableview 中真正的“选择”。

如果您想自己实现这一点,用您自己的绑定覆盖绑定应该是相当简单的(请参阅http://mvvmcross.wordpress.com中的自定义绑定 n+1 以了解自定义绑定的介绍)。

这可能是 MVVMCross 中的问题吗?

总的来说,我认为我会将其归类为特定绑定的已知限制,这是由于缺乏用户需求以及对选择是否真正意味着触摸屏时代的选择的一些混淆。

如果它被记录为一个错误,我会说它不是.. 如果它被记录为一个功能请求,我会尝试尽可能多地获取用户输入,了解开发人员真正想要什么,他们是否想要真正的单元格选择或滚动到视图中,两者或更多。

于 2013-07-05T05:37:38.340 回答
0

通过其他方式,您的意思不是来自我认为的 UI 线程。请尝试调用 UI 线程上的更改。

于 2013-07-04T21:56:07.067 回答