将多个视图绑定到多个视图模型
本文关键字:视图 模型 绑定 | 更新日期: 2023-09-27 18:37:14
我有一个WPF窗口显示不同的自定义视图。到目前为止,我能够使用我学到的有关 MVVM 的所有知识:)
现在我遇到了一个新的"问题":我在更大的视图中有 10 个相同视图的实体。这十个视图实体包含一组控件(文本框、组合框等),但都是一致的。
那么如何将这些视图绑定到视图模型呢?
我考虑在"更高级别"的 ViewModel 中拥有 10 个视图模型实例,并将视图固定定义的 VM 实例作为数据上下文。
我现在的问题是 --> 是否有一种更简单(或更方便)的方法来将许多(相同)视图绑定到他们的视图模型?
代码示例:
查看模型:
private PanelViewModel _panelViewModel1 = new PanelViewModel();
public PanelViewModel PanelVM1
{
get { return _panelViewModel1; }
}
查看示例:
<myControls:vwPanel HorizontalAlignment="Left" x:Name="vwPanel1"
VerticalAlignment="Top" DataContext="{Binding Path=PanelVM1}"/>
困扰我的是,十次视图需要十次这个逻辑?
更新:回答一些问题:我想显示一个视图 10 次(在我的示例中),我通过从 UserControl 继承来定义自己的视图。所以我的vwPanel
继承自UserControl
.这10个vwPanel只是放置在网格内的StackPanel内。
正如您所指出的,这不是关于显示数据,列表视图或数据网格是更好的起点。这是一个特殊情况,我需要这么多输入控件:/
UPDATE2:我希望的更像是定义一个视图模型列表,并将我的 10 个视图绑定到其中一个列表。但这行不通,不是吗?至少我不知道如何引用 XAML 列表中的一个"特殊"整体......
通常我使用隐式DataTemplates
将Views
映射到ViewModels
。它们可以进入 <Application.Resources>
,<Window.Resources>
甚至仅在特定元素下进入,例如<TabControl.Resources>
<DataTemplate DataType="{x:Type local:PanelViewModel}">
<myControls:vwPanel />
</DataTemplate>
这意味着每当 WPF 在可视化树中遇到类型 PanelViewModel
的对象时,它将使用 vwPanel
绘制它
对象通常通过ItemsSource
属性放置在VisualTree
中
<ItemsControl ItemsSource="{Binding CollectionOfAllPanels}" />
或使用ContentControl
<ContentControl Content="{Binding PanelVM1}" />
如果我正确理解你的问题,你有一个集合,你可以用视觉方式表示什么。也就是说,您有多个视图模型,要为其定义单个视图,但显示 X 次。您的示例显示您使用面板作为"面板视图模型"的视图...vwPanel 的父项控件是什么?假设您使用的是类似 ListBox 的东西,则可以定义一个包含 vwPanel 的自定义 DataTemplate,并将该 DataTemplate 分配给 ListBox.ItemTemplate。
例如:
<Window.Resources>
<DataTemplate x:Key="myVMTemplate" TargetType="{x:Type myViewModels:PanelViewModel}">
<myControls:vwPanel HorizontalAlignment="Left" VerticalAlignment="Top"/>
</DataTemplate>
</Window.Resources>
<ListBox ItemsSource="{Binding Path=MyCollectionOfPanelVMs}"
ItemTemplate="{StaticResource myVMTemplate}" />
我还没有验证这是否有效。