WPF 非同类视图列表

WPF A list of non-homogeneous views

我有一个 WPF 应用程序,我想显示一个非同类视图的列表。我想要一个按钮,我可以为它编写一个处理程序来显示一个视图。然后,由于它是一个视图,用户可以使用底层视图模型 (MVVM) 与其交互(例如在 TextBox 中输入值)。所以让我进一步解释。我希望实现的流程是用户选择要显示的视图。视图显示在列表中。然后用户与这个视图实例交互。当用户再次点击按钮时,会显示一个可能不同的视图,用户现在可以与两个视图进行交互。只要单击 'add' 按钮添加到列表中的视图,此过程就会继续。这更复杂,因为首先,这些观点中的每一个首先是不同的。应显示的特定视图取决于传递给命令的参数。其次,它很复杂,因为这些视图中的每一个还具有通过 IoC 传入并向下传递到关联视图模型的依赖项。换句话说,视图模型没有无参数的构造函数。所以我无法定义视图 model/view 关系,例如:

<Window.Resources>
   <DataTemplate DataType="{x:Type views:SelectCustomerViewModel}"\>
        <views:SelectCustomerView/>
    </DataTemplate>
</Window.Resources>

我进行了搜索,发现有一个解决方案与 ItemTemplateSelector 所概述的 here 接近。但据我所知,这只是非均匀显示的解决方案。如果我恢复到视图列表,那么我似乎正在破坏 MVVM 模型,因为我必须构建适当的视图并分配适当的视图模型。我应该如何 display/bring 使用来自 App.Xaml.cs 的 IoC 建立不同视图的动态列表?

ItemTemplateSelector 是显示列表中显示的(可能不同的)项目的不同视图(或视图的一部分)的完全有效方式。在引擎盖下,这是一种策略模式的实现,其中根据数据项选择视图。

然而,选项卡视图似乎也符合您的标准 - 当命令被触发时,您为所需视图实例化一个新选项卡。此视图可以绑定到相同的视图模型,因此您可以将一个选项卡的更改反映在另一个选项卡上。 IIRC 有一些选项卡视图实现包含类似于 ItemTemplateSelector 的内容(因为选项卡视图是列表控件的变体)。

至于 IoC - 不要担心那里的复杂性。大多数 IoC 实现将允许您指定构造函数参数值或表达式作为注册类型的一部分。