如何动态地将ViewModels连接到适当的视图?

时间:2009-06-22 16:45:24

标签: wpf xaml mvvm

我有一个WPF应用程序,它有一个 MainView.xaml 窗口,可以在运行时加载众多页面对象,将它们加载到 ViewModels 中,在菜单中动态显示

我的MainViewModel有一个 ObservableCollection ViewModels ,我将它们绑定到MainView.xaml文件中相应的 Views

但是,有没有办法自动化这样我每次添加页面时都不必进行这些手动输入?

<Window.Resources>

    <DataTemplate DataType="{x:Type vm:PageItemManageCustomersViewModel}">
        <v:PageItemManageCustomersView/>
    </DataTemplate>

    <DataTemplate DataType="{x:Type vm:PageItemManageEmployeesViewModel}">
        <v:PageItemManageEmployeesView/>
    </DataTemplate>

    <DataTemplate DataType="{x:Type vm:PageItemReportsViewModel}">
        <v:PageItemReportsView/>
    </DataTemplate>

</Window.Resources>

这不是“ ServiceLocator ”或“容器”应该做的事情,将视图连接到ViewModels?我已经读过上面的内容是常用的方式来匹配MVVM模式中的ViewModel和Views,但它对我来说是一个 bit static 。非常感谢任何想法。

1 个答案:

答案 0 :(得分:-1)

另一种选择是使用类根据某些键解析ViewModels。然后,您可以在主视图中使用它来解析控件的正确视图模型。

public static class ViewModelFactory
{
 public ViewModelBase Create(string someKeyHere)
 {
    //Some logic to resolve a view model
 }
}