我正在尝试绑定(bind) UITableView
到ObservableCollection<MyTypeViewModel>
使用MvxStandardTableViewSource
,并且我遇到了奇怪的行为和不起作用的绑定(bind)
(部分)代码是这样的:
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
与新的值(value)。但当我改变 SelectedObject
通过其他方式,表格不会更新显示的所选项目。我已经验证了SelectedObject
通过设置断点并将另一个控件绑定(bind)到它,确实正在被更改;另一个控件(标签)确实会随着选择的变化而变化,但是 UITableView
没有。
我做错了什么吗,或者这可能是 MVVMCross 中的问题?
最佳答案
selectitem 绑定(bind)被请求为“最好有”,并且主要是针对用户单击列表项的用户故事而请求的 - 因此,这目前是“一种来源方式”实现。
非常基本的细节和一些代码可以通过 - https://github.com/slodge/MvvmCross/issues/278 找到
事实上,当前的绑定(bind)滥用了“选定”范例 - 因为它并没有真正反射(reflect)单元格的选择状态,也没有处理多选 - 相反,它只是让 View 模型知道最新点击的项目。
如果存在完整双向绑定(bind)的真实用户故事/要求,那么这些应该是可添加的 - 例如,如果用户故事用于将项目滚动到 View 中,则可以使用“scrollToRowAt” - 请参阅 How to scroll UITableView to specific position - 但这可能不是 uitableview 中真正的“选择”。
如果您想自己实现这一点,那么用您自己的绑定(bind)覆盖绑定(bind)应该相当简单(有关自定义绑定(bind)的介绍,请参阅 http://mvvmcross.wordpress.com 中的自定义绑定(bind) n+1)。
could this be an issue in MVVMCross?
总的来说,我认为我会将其归类为特定绑定(bind)的已知限制,这是由于缺乏用户需求以及对选择是否真正意味着触摸屏时代的选择的一些混淆而造成的。
如果它被记录为一个错误,我会说它不是。如果它被记录为一个功能请求,我会尝试尽可能多地获取用户输入,了解开发人员真正想要从中得到什么,无论他们是否愿意想要真正的单元格选择或滚动到 View 中,两者或更多。
关于xamarin.ios - 为什么 MvxStandardTableViewSource SelectedItem 无法正确更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17478268/