【问题标题】:Binding an IList to list control using MVVM使用 MVVM 将 IList 绑定到列表控件
【发布时间】:2010-01-13 18:12:01
【问题描述】:

我正在尝试了解 MVVM 模式,并使用了一个示例程序来研究。该模型是一个 C# .net 库,在查询时返回一个 IList<INote> 对象。我希望我的视图能够通过数据绑定添加/编辑/删除此集合中的项目。但我不知道如何开始,使用 MVVM。请帮帮我。

模型公开了一个接口来检索IList<INote> 对象, View 有一个列表框,显示IList<INote> 的内容和几个其他控件,用于向IList<INote> 添加数据。

【问题讨论】:

    标签: wpf data-binding mvvm ilist


    【解决方案1】:

    将您的 ListBox 绑定到 ObservableCollection<T>,每次您在该 ObservableCollection<T> 中添加或删除某些内容时,它都会立即更新。

    这个ObservableCollection<T> 通常应该是你的 ViewModel 的一个属性。

    如果您的模型中的IList 属性不可观察(并且您无法控制它),您将必须编写代码以在您的视图模型中同步它。这些都是建筑的问题。我觉得在这方面最干净的选择是实际使用 ReadOnlyObservableCollection<T> 并使用您的存储库添加/删除项目并相应地同步。

    【讨论】:

    • 有没有办法自动化这种同步?就像我们将 ObservableCollection 绑定到控件一样,有没有办法将我的库中的 IList 绑定到我的 ViewModel 中的 ObservableCollection
    • 似乎你不能再像过去那样将普通集合包装到 ObservableCollection 中了。 ;-) 蛮力方法并不复杂,只需清除列表并再次从模型中读取即可。更优雅的方法是使用一些类似 HashSet 的算法的自定义 observable 集合类。
    【解决方案2】:

    我在DelegateCommand 上的blog post 应该会给你一个良好的基础。

    【讨论】:

      【解决方案3】:

      我将我的列表框绑定ObservableCollection<Item>,并在此集合中添加/删除/修改了项目。它工作正常。在how it works without any INotifyPropertyChanged 上查看。如果我错了,请纠正我

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-15
        相关资源
        最近更新 更多