c# - WPF 非同质视图列表
问题描述
我有一个 WPF 应用程序,我想提供一个非同质视图列表。我想要一个按钮,我可以编写一个处理程序来显示一个视图。然后因为它是一个视图,用户可以与之交互(在TextBox
例如)使用底层视图模型(MVVM)。所以让我进一步解释一下。我希望实现的流程是用户选择要显示的视图。视图显示在列表中。然后用户与视图的这个实例进行交互。当用户再次点击按钮时,可能会显示一个不同的视图,并且用户现在可以与两个视图交互。只要单击“添加”按钮添加到列表中的视图,这种情况就会继续。这更加复杂,因为首先,这些观点中的每一个都是不同的。应该显示的特定视图取决于传递给命令的参数。其次,它很复杂,因为这些视图中的每一个都具有通过 IoC 传递并向下传递到关联视图模型的依赖项。换句话说,视图模型没有无参数的构造函数。所以我不能定义一个视图模型/视图关系,比如:
<Window.Resources>
<DataTemplate DataType="{x:Type views:SelectCustomerViewModel}"\>
<views:SelectCustomerView/>
</DataTemplate>
</Window.Resources>
我进行了搜索,发现一种使用此处ItemTemplateSelector
概述的解决方案非常接近。但据我所知,这只是非同质显示器的解决方案。如果我恢复到视图列表,那么似乎我正在破坏 MVVM 模型,因为我必须构造一个适当的视图并分配适当的视图模型。我应该如何使用来自的 IoC 显示/显示不同视图的动态列表?App.Xaml.cs
解决方案
AnItemTemplateSelector
是为列表中显示的(可能是不同的)项目显示不同视图(或视图的一部分)的一种完全有效的方式。在底层,这是一种策略模式的实现,其中视图是根据数据项选择的。
但是,选项卡视图似乎也符合您的标准 - 当命令被触发时,您为所需视图实例化一个新选项卡。此视图可以绑定到同一个视图模型,因此您可以在另一个选项卡上回显一个选项卡的更改。IIRC 有一些选项卡视图实现包含类似于 a 的内容ItemTemplateSelector
(因为选项卡视图是列表控件的变体)。
至于 IoC - 不要担心那里的复杂性。大多数 IoC 实现将允许您指定构造函数参数值或表达式作为注册类型的一部分。
推荐阅读
- javascript - 条件始终为假,因为类型“字符串”在 Javascript 中没有重叠错误
- regex - 正则表达式 (PCRE) 匹配单词之间的单词
- python - 如何使用 Python 请求登录网站
- excel - 如何使用 VBA for excel 制作一个复制按钮
- python - ValueError:标签形状不匹配。预期的标签维度 = 1。收到 10
- c# - 是“策略”还是“模板方法”模式?
- json - 来自 API 调用的 Django 模型
- c++ - EnumDisplaySettings 不返回超宽显示器分辨率
- wordpress - Admin_menu 仅适用于特定用户
- java - 是否有一种识别/存储类的紧凑方法?