问题标签 [viewmodellocator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - MVVMLight ViewModelLocator 注册数据服务
这个问题可能看起来很幼稚,但我无法理解 ViewModelLocator.cs 文件中的这段代码:
我看到我们使用 DataService 来获取数据(例如从 WCF 服务)并将其分配给 MainViewModel。但是如果我注册了多个 ViewModel 怎么办?像这样:
假设我有另一个 DataService(例如 DataService2),但这个我将与 Page2ViewModel 一起使用。我怎样才能做到这一点?
另外,如果有人可以帮助我(甚至给我一个阅读链接)上面的代码。我不知道这意味着什么。
wpf - 使用 MVVM 时退出应用程序或关闭控件
在我的 WPF 应用程序中,我使用的是ViewModelLocator
无 IoC。我正在ViewModelLocator.Cleanup()
从我自己的按钮调用 MVVM-Light 框架提供的静态方法,该按钮与“关闭窗口命令”相关联。此命令调用 static ViewModelLocator.Cleanup()
,它调用我的 MainWindowViewModel 实例上的实例 Cleanup() 方法。然后,实例 Cleanup() 方法将 MainWindow 绑定到的属性设置DataContext
为 null。属性的 setter 引发了一个PropertyChanged
事件。奇怪的是,将此属性设置为 null 不会导致窗口关闭。
我试图理解为什么会这样?如果我将 MainWindow's 设置DataContext
为 null,那应该不一样Window.Close()
吗?就我而言,Window 及其所有元素都保留在屏幕上。但是,如果我尝试进一步的操作,我会得到空指针异常,表明DataContext
绑定属性确实已设置为空;这在调试器中也得到了证实。
我通过挂钩 Application.Exit 事件并在事件处理程序中发出 Window.Close() 创建了一种解决方法,以便创建我自己的“关闭窗口”按钮(即,为我自己的按钮/命令创建与单击相同的功能窗口右上角的 X 按钮)。由于直接从 MVVM 调用 UI 元素(即 Window 实例)对 MVVM 不友好,因此我使用ViewService来实现 Window.Close() 功能以保持变通方法 MVVM 友好。我是 ViewService 成语(或模式)的忠实拥护者,但我认为这里没有必要;除了,我可以看到退出应用程序是一种特殊情况,它可能应该与应用程序生命周期相关联,而.Net 似乎只允许通过发出 Window.Close() 方法来退出 WPF 应用程序。
想法赞赏。
wpf - 在 XAML 中引用静态资源
我有一个 UserControl,它引用了一个 StaticResource,它通常会在 app.xaml 中被引用并且很好……但我的程序集是一个库项目,所以没有 app.xaml。我现在如何引用这个 StaticResource?
这是我试图引用它的 UserControl
这是它通常在 app.xaml 中的位置
我只是收到错误消息“无法解析 viewModelLocator”。
c# - 如何使用 viewmodellocator 在视图模型之间发送参数
我正在使用 MVVMLight 创建一个 WPF 应用程序。我使用 ViewModelLocator 创建视图模型。我的问题是在它们之间传递参数。
例如我们有一个情况:
我们有一个包含一些实体的网格,当其中一个被双击时,我需要创建一个包含该实体详细信息的新视图。如何将选定的项目 id 发送到新视图的 ViewModel?
dependency-injection - 如何使用 Autofac 在 Windows Phone 8 应用程序中注入 ViewModel?
我希望能够使用 Autofac 作为我的 IoC 容器将 ViewModels 注入到我的 Windows Phone 8 应用程序的视图中。我该怎么做呢?我看过 Caliburn.Micro 框架,但我想使用更简单的东西。
wpf - MVVM Light 将参数传递给子视图模型
我是 MVVM 和 WPF 的新手。
我正在使用 MVVM Light 制作一个应用程序,该应用程序在一个窗口中包含一个 DataGrid,该窗口具有一个视图模型 (MainViewModel) 和另一个用于在 DataGrid 中添加和编辑记录的窗口,该窗口也有自己的视图模型 (EditViewModel)。
我担心的是我用来从 MainViewModel 打开添加/编辑窗口的方法。在 MainViewModel 中,我有一个属性 SelectedItem,它绑定到 DataGrid 的 SelectedItem 属性和一个 IsEdit 布尔属性,指示是否应在添加或编辑模式下启动添加/编辑窗口。
当添加/编辑窗口在编辑模式下打开时,在其视图模型的构造函数中,我有以下行:
这显然检索了 MainViewModel 的当前实例,它工作得非常好,但我不确定这是不是最好的方法。
此外,如果我有多个主窗口实例,它们使用相同的 MainViewModel 实例,并且我从它们两者中打开一个添加/编辑窗口的实例,则添加/编辑窗口将从同一个实例获取数据MainViewModel 这可能是一个问题。
如果我尝试为打开的每个 MainWindow 创建一个新的 MainViewModel 实例,那么我不知道如何将当前使用的 MainViewModel 的实例传递给 EditViewModel。
我希望我清楚我需要做什么。告诉我我是否遗漏了什么,我会添加它:)
提前致谢
wpf - 在 mvvmlight 中从主项目 viewmodellocatoe 注册不同项目中的视图模型
如何在 MVVMLight 的 ViewModelLocator 类中的不同引用项目中注册视图模型。当我尝试使用 SimpleIoc 注册 viewmodel 类时,我不断收到错误,因为它位于不同的项目中,我想为我的应用程序的不同部分保留不同的项目。
c# - 了解 Windows Phone 开发中的 DataBinding
我在理解数据绑定时遇到了一些麻烦。我正在努力学习Windows Phone 8
发展。
我想在这里理解一些示例代码。
在MainPage.xaml
他定义的DataContext
:
Locator
是ViewModelLocator
定义为Resource
inApp.xaml
并且
Master
是类型的公共属性MasterViewModel
。
所以我认为这意味着您现在可以访问MasterViewModel
该类的属性。你有。但是在同一页面上,他绑定到不在的属性MasterViewModel
,但在完全不同的ViewModel
:
Model
是不同的属性ViewModel
。
那么他如何访问它呢?DataContext
据我所知,他并没有超越某个地方。我错过了什么?
我没有发布很多代码,因为我想我只是还不了解数据绑定,答案对你来说是显而易见的。如果需要,我可以向您展示更多代码,这是来自 Laurent Ibugnion 的示例代码。
提前致谢
编辑:在他的视频中,他说他可以使用 dataBinding,因为在 DataTemplate 中,DataContext 设置为不同的 ViewModel ......但我看不到他在哪里设置了这个 viewModel:
编辑:解决了,我终于找到了,
谢谢你的帮助
viewmodel - MvvmCross ViewModel 缓存和重新初始化
当从缓存中重新加载 ViewModel 时,我需要能够拦截框架并执行重新初始化。由于没有重新创建 ViewModel,我既不能使用 Init()、MvxViewModel.InitFromBundle 也不能使用 MvxViewModel.ReloadFromBundle 方法。
我正在尝试调试单击后退按钮会恢复状态不一致的 ViewModel 的情况。某种 MvxViewModel.OnReloading() 会有所帮助。
有没有办法在 v3 中做到这一点?
编辑:
假设我有 FirstPageViewModel,它公开了一个导航到 SecondPageViewModel 的命令。根据我的观察,如果您在 SecondPageView 上单击模拟器的后退按钮,则不会构造 FirstPageViewModel。相反,我相信它是从某个缓存中检索的,然后绑定到视图。此缓存可能是 IMvxSingleViewModel 缓存的实现。
因此,在 ViewModel 构建之后调用 Init()、InitFromBundle() 和 ReloadFromBundle() 的常规流程不适用于这种情况。换句话说,我需要一种重新初始化 ViewModel 的方法,无论它是刚刚构建的,还是从缓存中复活的。如果是前者,我可以使用 Init() 方法。如果后者为真,则无法在 ViewModel 本身内执行此操作。
这就是问题:
我有一个从 FirstViewModel 传递到 SecondViewModel 的 ICollectionService 实例。FirstView 还包含一个绑定到此 CollectionService 的 ListView。因为 CollectionService 不是强类型的,所以我可以传递它并使用适当的项目模板在视图中呈现它的项目。
在显示 SecondViewModel 之前,FirstViewModel 检索一些远程数据并填充 CollectionService。当显示 SecondViewModel 时,它的视图使用不同的项模板显示来自 CollectionService 的数据。但是,如果我向后导航,由于 FirstViewModel 仍在引用 CollectionService,FirstView 将呈现 SecondViewModel 使用的数据,除非可以重新初始化 FirstViewModel,在此过程中清除 CollectionService。也许方法是错误的,但这是我问题的症结所在。
我不知道平台是否会有所不同,因为我希望 Windows Phone 和 iOS 上的行为相同,因为这种重新初始化将发生在 Core 模块中。尽管如此,这些都是对 Android 的观察。
TIA。
c# - 关于在 MVVM 中正确使用 ViewModelLocator 的问题
我正在使用 MVVM Light 开发 WPF/MVVM 应用程序。现在我ViewModelLocator
的很标准;它包括一个static
构造函数,该构造函数通过注册 ViewModelSimpleIoc
并具有返回 ViewModel 的当前实例的属性。
我不知道这有多合适,但我一直在探索使用ViewModelLocator
ViewModels 中的实例来访问其他 ViewModels 的属性并更改ContentControl
我的一个视图。如果这样做有任何重大问题,请告诉我,以便我找到解决方法。例如,我可能在 ViewModel 中有一些东西,例如:
在不同的 ViewModel 中,我有以下内容:
在这种情况下,在我看来CurrentViewModel
是必然的。ContentControl
目前能够做到这一点非常方便,但我想从更有经验的程序员那里得到一些意见,以确保我不会自欺欺人。如果它有问题,我可以采取更多可接受的路线来达到相同的结果吗?
现在,如果上述方法没有任何问题,我想知道制作ViewModelLocator
static
. 为了尝试一下,我快速切换到static
ViewModelLocator
. 在我的 MainWindow.xaml 中,我将其设置DataContext
为:
...回到第一个例子,我可以使用:
和:
现在该程序使用 a 可以正常工作static
ViewModelLocator
,但它还处于起步阶段,所以我想知道这是否是未来可行的选择,或者我是否应该完全远离 a static
ViewModelLocator
。
对于这些问题的任何建议或意见将不胜感激。我对编程还很陌生,我想学习从长远来看对我有用的技术。
如果我在这里所做的事情没有明显的问题,也请告诉我。
谢谢。