gpt4 book ai didi

c# - 为什么 ViewModelLocator 成员不是静态的

转载 作者:太空宇宙 更新时间:2023-11-03 23:11:58 24 4
gpt4 key购买 nike

为什么MVVM Light中ViewModelLocator的构造函数和成员不是静态的?考虑到我在构造函数中执行 IOC 注册过程是这样的:

SimpleIoc.Default.Register<MainWindowVM>();

这是否意味着每次我在 View (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 类的构造函数被调用,您可以在 View 中使用该实例:

<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>

关于c# - 为什么 ViewModelLocator 成员不是静态的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38872002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com