2

当我用我当前的应用程序解决越来越多的与 MVVM 相关的问题时,更多的问题不断涌现。:)

我试图替换的当前实现涉及一个 StackPanel,其子代或多或少是动态生成的(通过查看配置文件)。每个孩子都是 UserControl 的一个实例。之前,我所做的是为 StackPanel 分配一个名称,然后在 Window_Loaded 事件处理程序中,我只需确定必要的子级数量,为每个子级实例化一个 UserControl,并为 UserControl 分配一个 ID,这样我就知道了单击特定 UserControl 实例的按钮的正确来源;每个 UserControl 上有 3 个按钮。

所以我知道我想将 StackPanel 绑定到一个集合。这当然是不可能的,因为我需要使用从 ItemsControl 派生的东西,例如 ListBox 或 ListView(甚至是 ItemsControl 本身)。为了在 MVVM-ifying 的第一次迭代中保持简单,我将只使用一个 ListBox。

现在的问题是,我在代码隐藏中的 ObservableCollection 是否应该是 ObservableCollection?我相信这意味着无论我如何对我的 GUI 进行皮肤处理,这个 ListBox 将始终具有子项,无论它们在 MyUserControl 的 XAML 文件中的外观如何。我也希望它是可定制的,但我认为这意味着我也必须将 MVVM 模式应用于 UserControl。

4

2 回答 2

5

如果您希望每个列表项具有不同的模板,并且想要坚持 MVVM 样式,那么您最好不要考虑 UserControls。

您可以让主视图将 ListBox 绑定到 View Model 实例的可观察集合。如果您设置数据模板以将 ViewModel 类映射到相应的 UserControl,则无需显式加载 UserControl - 只需将任何 ItemsControl 绑定到您的 ViewModel 集合,并让数据模板负责构建并将其映射到该 VM 的正确 UserControl。

于 2010-01-04T19:00:34.463 回答
1

你的收藏不一定非得ObservableCollection是。的“可观察”部分ObservableCollection只是提供事件以通知其他人集合已更改的问题,它与视觉表示无关。

ObservableCollection非常适合 MVVM,因为它提供了所有事件通知,但最终,无论您使用 aList<T>还是 anObservableCollection<T>在任何给定时间点的视觉呈现方式都没有区别。

于 2010-01-04T19:00:48.147 回答