2014-08-27 40 views
1

我正在尝试动态修改ViewModel的List(ObservableCollection)中的项目,并通过MvvmCross绑定使这些更改在View中更新。我最终的目标是,当用户点击列表项目时,我会弹出一个对话框,要求他们编辑该项目。当对话框变暗时,视图模型将被更新(通过我假设的ICommand),并且修改后的值现在将在列表中。MvvmCross DataBinding修改Android ListView中的单个项目

我还没有看过对话框,所以现在我只是试图切换一个布尔值,每次单击列表项并在MvxListView中更改该值。我将视图中的MxvListView绑定到ViewModel中的ObservableCollection,并且有一个MvxCommand,当选择一个项目时会调用它。所有这些都在工作,我可以看到调试器中的值发生了变化,但是,新值不会显示在MvxListView中。所以我的问题是:如何获取ObservableCollection中单个项目中的修改数据以绑定到MvxListView?

我在网上看到的所有例子都使用ObservableCollection进行动态绑定,但他们只添加或删除项目。我还没有找到任何修改项目的例子。如果我将MvxCommand中的代码从修改数据更改为添加或删除项目,则列表将会更新。所以这告诉我我很接近。

而不是复制粘贴在这里的代码,我创建了一个示例项目在GitHub上这里看看: https://github.com/smulrich/breaktimer

我欣赏的帮助。

回答

2

您只需更换
Breaks[index] = b;

Breaks[index] = new DailyBreak() { Reason = b.Reason, TimeOfDay = b.TimeOfDay, Enabled = b.Enabled };

还是比较合理的,你应该名单之中,ObservationCollection和INotifyPropertyChanged的实现INotifyPropertyChangedDailyBreak 指出错误,请参阅enter link description here

+1

+1为“更合理”的建议。最好的方法是'DailyBreak'实现'INotifyPropertyChanged' - 例如它可以从'MvxNotifyPropertyChanged'继承 – Stuart 2014-08-28 12:21:18