为什么ViewModelLocator成员不是静态的
本文关键字:静态 ViewModelLocator 成员 为什么 | 更新日期: 2023-09-27 18:01:47
为什么MVVM Light中ViewModelLocator
的构造函数和成员不是静态的?考虑到我像这样在构造函数中执行IOC注册过程:
SimpleIoc.Default.Register<MainWindowVM>();
这是否意味着每次我在视图(XAML)中使用它时,它将创建ViewModelLocator
的新实例,从而一遍又一遍地注册我的类?
如果我需要在代码中访问它该怎么办?我需要在每个地方创建ViewModelLocator的实例吗?
来自MVVMLight的ViewModelLocator
不是静态设计的,也不是单例的。这是因为您在App.xaml
中注册了一个全局实例:
<Application x:Class="Project.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
d1p1:Ignorable="d"
xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:Acoustix.ViewModel">
<Application.Resources>
<ResourceDictionary>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
</ResourceDictionary>
</Application.Resources>
</Application>
此时,ViewModelLocator
类的构造函数被调用,您可以在视图中使用实例:
<Window x:Class="Project.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
DataContext="{Binding Main, Source={StaticResource Locator}}" Icon="Assets/app.ico">
<!-- ... -->
</Window>