C# “我如何实施?”;“先查看模型”;使用棱镜和统一?

C# “我如何实施?”;“先查看模型”;使用棱镜和统一?,c#,mvvm,unity-container,prism,caliburn.micro,C#,Mvvm,Unity Container,Prism,Caliburn.micro,澄清 我正在使用MVVM解决方案。我在视图模型和视图之间有一个1对1的映射。我看到的所有解决方案都遵循视图优先的方法,其中视图类型由IoC容器解析,并且有一个ViewModel作为依赖项。我需要以某种方式扭转这种局面 原创帖子: 我目前正在尝试将一个简单的数据库查看应用程序从Caliburn Micro重构到Prism(我对Prism非常陌生)。该应用程序当前使用ViewModel优先方法,ShellViewModel维护绑定到TabControl的ViewModels列表。 我找不到如何在Pr

澄清 我正在使用MVVM解决方案。我在视图模型和视图之间有一个1对1的映射。我看到的所有解决方案都遵循视图优先的方法,其中视图类型由IoC容器解析,并且有一个ViewModel作为依赖项。我需要以某种方式扭转这种局面

原创帖子:

我目前正在尝试将一个简单的数据库查看应用程序从Caliburn Micro重构到Prism(我对Prism非常陌生)。该应用程序当前使用ViewModel优先方法,ShellViewModel维护绑定到TabControl的ViewModels列表。 我找不到如何在Prism中实现类似的方法。我看到的所有解决方案都使用视图优先的方法,但我有多个状态,所有状态都映射到一种视图类型,并且需要将这些状态分开。

是否有一种方法可以配置prism,以便在将viewmodel指定给某个区域时自动插入视图


谢谢。

看看这篇代码项目文章(忽略关于子容器的部分):

Rachel在对原始问题的评论中为我指出了一个解决方案。 我没有尝试实现特殊的prism功能和prism区域,而是使用DataTemplates实现了更直接的MVVM

ViewModel大纲:

public abstract class ContainerViewModel : BindableBase
{
    public ObservableCollection<ItemViewModel> Items { get; set; }
    public ItemViewModel ActiveItem { get; set; }

    protected virtual void Add(ItemViewModel item) { ... }
    protected virtual void Remove(ItemViewModel item) { ... }
    protected virtual void Activate(ItemViewModel item) { ... }
}
公共抽象类ContainerViewModel:BindableBase
{
公共ObservableCollection项{get;set;}
public ItemViewModel ActiveItem{get;set;}
受保护的虚拟空添加(ItemViewModel项){…}
受保护的虚拟无效删除(ItemViewModel项){…}
受保护的虚拟无效激活(ItemViewModel项){…}
}
和XAML:

<TabControl Grid.Column="1" ItemsSource="{Binding Items}" SelectedItem="{Binding ActiveItem}">
                <TabControl.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Table.TableName}"    />
                    </DataTemplate>
                </TabControl.ItemTemplate>
                <TabControl.ContentTemplate>
                    <DataTemplate DataType="{x:Type viewModels:QueryViewModel}">
                        <local:QueryView />
                    </DataTemplate>
                </TabControl.ContentTemplate>
            </TabControl>


我认为您希望使用隐式数据模板。这只是在XAML中定义的数据模板,带有TargetType,但没有键。当在可视化树中遇到指定对象时,WPF将自动使用该DataTemplate绘制该对象,例如,当它尝试呈现TabControl时,其中ItemsSource设置为ViewModels的集合。如果需要,请参阅示例。本文提供了信息,但似乎没有遵循MVVM(演示解决方案实际上根本不包含任何视图),并在底部声明它是WPF/Silverlight应用程序的利基解决方案。我将看看如何着手澄清我的问题。