将多个视图绑定到多个视图模型

bas*_*sti 5 c# wpf user-interface mvvm

我有一个WPF窗口显示不同的自定义视图.到目前为止,我能够使用我学到的关于MVVM的一切:)

现在我遇到了一个新的"问题":在更大的视图中我有10个相同视图的实体.这十个视图实体包含一组控件(文本框,组合框等),但都是一致的.

那么如何将这些视图绑定到ViewModel?

我想过在"更高级别"的ViewModel中有10个ViewModel实例,并将视图修复定义为VM的实例作为datacontext.

我现在的问题是 - >是否有更简单(或更方便)的方法将许多(相同的)视图绑定到其视图模型?

代码示例:

查看型号:

private PanelViewModel _panelViewModel1 = new PanelViewModel();
public PanelViewModel PanelVM1
{
   get { return _panelViewModel1; }
}  
Run Code Online (Sandbox Code Playgroud)

视图 - 例如:

<myControls:vwPanel HorizontalAlignment="Left" x:Name="vwPanel1" 
                    VerticalAlignment="Top" DataContext="{Binding Path=PanelVM1}"/>
Run Code Online (Sandbox Code Playgroud)

让我感到困扰的是,十次观看我需要十倍的逻辑吗?

更新: 回答一些问题:我想要显示一个视图10次(在我的示例中)我通过继承UserControl来定义自己的视图.所以我vwPanel继承自UserControl.10个vwPanel只放在Grid内的StackPanel中.

这不是关于显示数据,正如您所指出的那样,列表视图或数据网格是一个更好的起点.这是一个特殊情况,我需要这么多输入控件:/

UPDATE2:我希望更像是定义ViewModel列表并将我的10个视图绑定到此列表中的一个.但这不会起作用吗?至少我不知道如何在XAML列表中引用一个"特殊"权利......

Rac*_*hel 8

通常我使用隐式DataTemplates映射ViewsViewModels.他们可以进入<Application.Resources>,<Window.Resources>甚至可以进入特定的元素,例如<TabControl.Resources>

<DataTemplate DataType="{x:Type local:PanelViewModel}">
    <myControls:vwPanel />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

这意味着只要WPF遇到类型的VisualTree中的对象PanelViewModel,它就会使用它来绘制它vwPanel

对象通常放在VisualTree通过ItemsSource属性中

<ItemsControl ItemsSource="{Binding CollectionOfAllPanels}" />
Run Code Online (Sandbox Code Playgroud)

或者使用 ContentControl

<ContentControl Content="{Binding PanelVM1}" />
Run Code Online (Sandbox Code Playgroud)