【问题标题】:How do I create a new instance of an ItemCollection如何创建 ItemCollection 的新实例
【发布时间】:2013-09-05 19:27:11
【问题描述】:

我正在使用 MVVM 模式中的 WPF。

我需要一个 ItemCollection 实例来放入我的 ViewModel,然后我可以将其绑定到视图上 DataGrid 的 Items 属性。

我将以编程方式向此 ItemCollection 添加按钮。

我注意到它没有公共构造函数,并且是密封的。有什么办法可以让我掌握实例吗?是否有任何静态/工厂方法会返回一个实例?

谢谢

【问题讨论】:

  • 不要在 MVVM 的 ViewModel 中添加 UI 元素。使用ObservableCollection<ICommand>

标签: c# wpf mvvm


【解决方案1】:

不,你不能创造一个,不,你甚至不需要一个。使用 ItemsSource 属性将数据源数据绑定到网格,这在 WPF 中很常见。

ItemsCollection 交互的唯一时间是直接访问ItemsControlItems 属性,即手动处理数据而不是绑定时。这种类型的操作完全违背了 MVVM 的精神,所以你不会错过任何东西。

【讨论】:

  • 或者在创建从 ItemsControl 派生的自定义控件时,这是完全不同的故事
  • 效果很好,我将 ItemsSource 绑定到了 @HighCore 推荐的 ObservableCollection。谢谢
  • 我认为在任何情况下都不需要创建它的新实例。 @Jon 暗示ItemsCollection 打算在内部使用。 ObservableCollection 类旨在用于呈现读/写集合,这是 OP 真正想要的。最终,它归结为定义一个视图模型,您可以为它指定一个模板(在 OP 的情况下,一个Button)并将这些集合绑定到控件。那的MVVM模式; OP要求的不是
【解决方案2】:

这是创建一个空的ItemCollection 的解决方法:

var myCollection = new DataGrid().Items;

【讨论】:

  • 你会用这个做什么?项目集合往往是只读的,因此您无法绑定或分配它们 AFAIK,因此不确定这是否真的有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
相关资源
最近更新 更多