【问题标题】:MvvmCross DataBinding To Modify Individual Item in Android ListViewMvvmCross DataBinding 修改 Android ListView 中的单个项目
【发布时间】:2014-10-21 14:56:49
【问题描述】:

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

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

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

我没有将代码复制粘贴到这里,而是在 github 上创建了一个示例项目来查看: https://github.com/smulrich/breaktimer

感谢您的帮助。

【问题讨论】:

    标签: mvvm data-binding android-listview xamarin mvvmcross


    【解决方案1】:

    您可以简单地替换
    Breaks[index] = b;

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

    或者更合理的,你应该意识到INotifyPropertyChangedDailyBreak List、ObservationCollection 和 INotifyPropertyChanged 的​​区别,请参考enter link description here

    【讨论】:

    • +1 表示“更合理”的建议。最好的前进方式是DailyBreak 实施INotifyPropertyChanged - 例如它可以继承自MvxNotifyPropertyChanged
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多