我的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>
其他观点使用相同的方法