为什么MvxStandardTableViewSource SelectedItem不能正确更新?

时间:2013-07-04 21:24:59

标签: xamarin.ios mvvmcross

我正在尝试使用UITableViewObservableCollection<MyTypeViewModel>绑定到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的一个问题?

2 个答案:

答案 0 :(得分:2)

selectitem绑定被要求作为“很高兴”,主要是用户点击列表项的用户故事 - 所以这是当前的“一种方式来源”实现。

可以通过 - https://github.com/slodge/MvvmCross/issues/278

找到最基本的细节和一些代码

事实上,当前绑定滥用了“选定”范例 - 因为它并没有真正反映单元格的选择状态,也没有处理mutiselect - 而只是让viewmodel知道最新的tapped项目。

如果有完整的双向绑定的真实用户故事/要求,那么这些应该是可添加的 - 例如,如果用户故事是用于将项目滚动到视图中,则可以使用'scrollToRowAt' - 请参阅How to scroll UITableView to specific position - 但在uitableview中,这可能不是真正的“选择”。

如果你想自己实现它,那么用你自己的方法覆盖绑定应该是相当简单的(参见http://mvvmcross.wordpress.com中的自定义绑定n + 1以获得自定义绑定的介绍)。

  

这可能是MVVMCross的一个问题吗?

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

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

答案 1 :(得分:0)

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