在ViewModel文件夹新建类ViewModelLocator。 添加资源作为全局的ViewModel管理 <Application.Resources> <ResourceDictionary> <viewModel:ViewModelLocator x:Key ="ViewModelLocator"></viewModel:ViewModelLocator> </ResourceDictionary> </Application.Resources MainPage,一个是ChangeControlPage,那么我们就在ViewModel文件夹新建两个类MainModel和ChangeControlModel 他们继承ViewModelBase 接着在ViewModelLocator 原来是在cs写我们的ViewModel实例,现在我们可以直接在xaml <Page.DataContext> <Binding Source="{StaticResource <em>ViewModelLocator</em>
处理自定义约定 虽然ViewLocator和ViewModelLocator类通过提供对每个类的NameTransformer实例的公共访问来支持非标准约定,但对于那些不熟悉正则表达式语法的人来说,添加基于正则表达式的新名称转换规则可能是一项艰巨的任务 ViewLocator.ConfigureTypeMapping(), ViewModelLocator.ConfigureTypeMapping() Methods 此方法配置或重新配置定位器类添加类型映射的方式 {0}", IncludeViewSuffixInViewModelNames = false }; ViewLocator.ConfigureTypeMappings(config); ViewModelLocator.ConfigureTypeMappings {0}", IncludeViewSuffixInViewModelNames = false }; ViewLocator.ConfigureTypeMappings(config); ViewModelLocator.ConfigureTypeMappings -> MyProject.Views.Customer.Master //when the context is "Master" ViewLocator.AddNamespaceMapping(),ViewModelLocator.AddNamespaceMapping
Modules with Code 使用代码加载模块 Modules with Directory 从目录加载模块 Modules loaded manually 使用IModuleManager手动加载模块 ViewModelLocator 使用ViewModelLocator ViewModelLocator - Change Convention 更改ViewModelLocator命名约定 ViewModelLocator - Custom winfx/2006/xaml" xmlns:prism="http://prismlibrary.com/" prism:ViewModelLocator.AutoWireViewModel
使用名称Transformer NameTransformer是在Caliburn.Micro v1.1中引入的,它是ViewLocator和ViewModelLocator如何将类名映射到其伙伴角色的一个组成部分 ViewLocator和ViewModelLocator类将使用结果名称列表按顺序检查AssemblySource.Instance集合中是否存在匹配类型。找到类型后,将忽略列表中的其余名称。 自定义规则是通过调用ViewLocator和ViewModelLocator类维护的NameTransformer对象的AddRule()方法添加的。 此规则产生以下结果: ViewModelLocator添加的相应内置规则为: NameTransformer.AddRule(@"(? 为了演示“globalFilterPattern”是如何应用的,我们可以看看ViewModelLocator的另外两个内置规则: //Check for <Namespace>.
这篇文章将通过以下内容讲解如何使用 Prism.Wpf 构建一个 WPF 程序: PrismApplication RegisterTypes XAML ContainerProvider ViewModelLocator ViewModelLocator Prism 还提供了 ViewModelLocator,用于将 View 的 DataContext 设置为对应的 ViewModel: <Window x:Class xmlns:prism="http://prismlibrary.com/" prism:ViewModelLocator.AutoWireViewModel="True"> 在将 View 的 ViewModelLocator.AutoWireViewModel 附加属性设置为 True 的同时,Prism 会为查找这个 View 对应的 ViewModel 类型,然后从 Container DialogService 内部会调用 ViewModelLocator.AutoWireViewModel,所以使用 DialogService 调用的 View 无需添加这个附加属性。
安装成功后,会在我们新建的Wpf工程中自动生成ViewModel文件夹,里面包含MainViewModel.cs和ViewModelLocator.cs两个文件。
这由ViewModelLocator.LocateForViewType处理。 其他需要知道的事情 实际上,框架从未直接调用ViewModelLocator.LocateForViewType。它由ViewModelLocator.LocateForView在内部调用。 框架使用 ViewModelLocator仅由框架的WP7版本使用。FrameAdapter使用它,它确保每次导航到页面时,都提供了正确的ViewModel。 在FrameAdapter内部,当页面被导航到时,首先使用ViewModelLocator获取该页面的ViewModel。然后,使用ViewModelBinder将ViewModel连接到页面。
schemas.openxmlformats.org/markup-compatibility/2006" Title="Dotnet9 WPF新手引导功能" Width="800" Height="450" prism:ViewModelLocator.AutoWireViewModel prism 命名空间 主要用途在 prism:ViewModelLocator.AutoWireViewModel="True" 这句代码,将视图 MainWindow.xaml 与 MainWindowViewModel.cs
clr-namespace:PrismSample" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800" prism:ViewModelLocator.AutoWireViewModel
clr-namespace:CommandSample" mc:Ignorable="d" Title="MainWindow" Height="350" Width="450" prism:ViewModelLocator.AutoWireViewModel prismlibrary.com/" xmlns:local="clr-namespace:CompositeCommandsSample" mc:Ignorable="d" prism:ViewModelLocator.AutoWireViewModel
" xmlns:prism="http://prismlibrary.com/" Width="350" Height="120" prism:ViewModelLocator.AutoWireViewModel
Localization" xmlns:local="clr-namespace:CodeWF.Modules.Converter.Models" prism:ViewModelLocator.AutoWireViewModel
ViewSuffixList = new() { "" } }; ViewLocator.ConfigureTypeMappings(myRule); ViewModelLocator.ConfigureTypeMappings
Stretch"/> View和ViewModel的绑定放在了App.xaml <Application.Resources> <ResourceDictionary> <vm:ViewModelLocator
View Model 定位器 尽管Caliburn.Micro支持ViewModel First方法,但我们也通过提供与ViewLocator具有相同映射语义的ViewModelLocator来支持View
Localization" xmlns:local="clr-namespace:CodeWF.Modules.Converter.Models" prism:ViewModelLocator.AutoWireViewModel
Horizontal" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" prism:ViewModelLocator.AutoWireViewModel
http://schemas.microsoft.com/expression/2010/interactivity" Height="600" Width="400" prism:ViewModelLocator.AutoWireViewModel
i18n="https://codewf.com" xmlns:language="clr-namespace:Localization" prism:ViewModelLocator.AutoWireViewModel
public UnoView() { this.Loaded += (s, e) => { var viewModelType = ViewModelLocator.GetViewModelType