加载已实例化的ViewModel

时间:2018-06-14 12:24:24

标签: c# .net wpf xaml mvvm

我的XAML中有一个TabControl:

   <TabControl ItemsSource="{Binding TabViewModels}" DisplayMemberPath="DisplayName">
        <TabControl.Resources>
            <DataTemplate DataType="{x:Type viewModels:DeviceTypesViewModel}">
                <local:DeviceTypesView />
            </DataTemplate>

            <DataTemplate DataType="{x:Type viewModels:PropertyTypesViewModel}">
                <local:PropertyTypesView />
            </DataTemplate>
        </TabControl.Resources>
    </TabControl>

目前,每个标签都会创建其ViewModel的新实例。这种方法的问题是在每个选项卡中我需要连接到同一个数据库。我在主ViewModel(控制此TabControl存在的View的那个)中建立了此连接。在这个主ViewModel中,我实例化了其他ViewModel(对于每个选项卡):

public ManagerMainViewModel()
{
    var unitOfWork = new UnitOfWork();
    DeviceTypesViewModel = new DeviceTypesViewModel(unitOfWork);
    PropertyTypesViewModel = new PropertyTypesViewModel(unitOfWork);

    TabViewModels = new ObservableCollection<MJMVVM.NotificationBase>
    {
        DeviceTypesViewModel,
        PropertyTypesViewModel
    };
}

不幸的是我无法找到实际使用这些已创建实例的方法,而是创建了新实例(我的视图模型有2个构造函数,其中一个接受0个参数,其他接受连接对象)。

// EDIT 这是我在每个视图中实例化ViewModels的方法。 DeviceTypesView使用:

<UserControl.Resources>
    <viewModels:DeviceTypesViewModel x:Key="thisVM"/>
</UserControl.Resources>

<UserControl.DataContext>
    <StaticResource ResourceKey="thisVM"/>
</UserControl.DataContext>

其他观点使用相同的方法

0 个答案:

没有答案