问题标签 [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.

0 投票
1 回答
324 浏览

c# - 未知类型 ViewModelLocator

我似乎用这个撞了一堵砖墙。

在将 Windows Phone 应用程序转换为通用应用程序时,我实现了 mvvm-light 的东西,就像我之前所做的那样。

但是,我现在确实在 App.xaml 中遇到了一个问题,它指出它找不到 ViewModelLocator。结果,我查看了 Laurent 的这篇博文以寻求指导,但没有任何运气。(http://blog.galasoft.ch/posts/2014/04/building-a-universal-application-for-windows-phone-8-1-and-windows-8-1-with-mvvm-light/

我正在使用最新版本的 mvvm-light (4.4.32.1)。

如果我注释掉这一行: <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" /> 它会毫无问题地构建和运行。一旦我取消注释该行,我就会收到错误:XML 命名空间'typename declaration'中的未知类型'ViewModelLocator'

我现在也突然收到以下错误:无法加载文件或程序集 'Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=619affe60327fc48' 或其依赖项之一。程序集版本有一个与请求不匹配的公钥令牌。

在项目中,我根据 NuGet 安装引用了 Microsoft.Practices.ServiceLocation 的 v 1.3 ...

0 投票
1 回答
369 浏览

c# - Windows Phone 8:如何使用 MVVM 为每个数据透视项目加载内容?

我在我的应用程序中使用 Pivot Control。我想通过远程 url 加载每个数据透视项目的内容(即使用 Web 服务)。

例如 - 我有一个详细的食谱数据透视页面。它有 3 个枢轴项目 - 信息、评论、画廊。系统托盘上有进度指示器。

我想加载每个数据透视项目的数据一次,即如果用户滑回先前加载的数据透视项目,那么它不应该再次对该数据透视项目发出 Web 请求,并且在这种情况下进度指示器应该是不可见的。

我应该为每个数据透视项目使用不同的 ViewModel 还是为所有项目使用单个 MainViewModel?

如何管理 Pivot 页面中进度指示器的可见性?

我应该为每个 Pivot 项目创建 UserControl 吗?

0 投票
1 回答
466 浏览

vb.net - PRISM 5:VB.NET 中的 ViewModelLocator,视图中无法实现 IView

我目前正在使用 MVVM 模式和 PRISM ViewModelLocator 在 VB.NET 中构建一个 PRISM 5 应用程序。PRISM ViewmodelLocator 需要所有视图来实现 Microsoft.Practises.Prism.Mvvm.IView 接口。这个接口只包含一个属性:DataContext。

由于 View(它是一个 FrameworkElement)已经具有属性 DataContext,在 c# 中,在 View 类名称后面添加“:IView”就足够了,而无需为 DataContext 属性提供新的实现(隐式接口实现)。神奇的是,ViewModel 然后通过 Datacontext 属性自动连接到 View。

在 VB.NET 中这是不可能的,因为您不能进行隐式接口实现。在类的顶部添加“Implements IView”时,VB 指示为 DataContext 属性提供一个实现。由于 FrameworkElement 已经有一个 Datacontext 属性,VB 会自动添加一个 Datacontext1 属性的实现。当然,将 ViewModel 连接到 View 是行不通的。下面是我的代码:

看法

视图模型

有没有围绕这个的最佳实践?

到目前为止,我发现似乎可行的只是将此行添加到我的视图的构造函数中:

但我发现这是一个非常肮脏的解决方案。

0 投票
1 回答
1022 浏览

c# - 如何重新打开关闭的窗口?

ShutdownMode我在我的应用程序中切换到,OnExplicitShutdown所以当我关闭窗口时,我的应用程序仍在工作,我尝试像这样重新打开窗口:

但我有以下错误:Set property '...ViewModelLocator.AutoWireViewModel' threw an exception.并且InnerException是:'AutoWireViewModel' property was already registered by 'ViewModelLocator'

你知道如何解决这个问题吗?

ViewModelLocatorMicrosoft.Prism

0 投票
0 回答
279 浏览

c# - WPF 和 SimpleMVVM:将新视图模型绑定到视图

请注意,此问题特定于 SimpleMVVM 及其 ViewModelLocator 的使用。

我有一个像这样的视图设置:

我的定位器将 CallViewModel 定义为:

在执行期间,我试图创建一个新的 CallUserControl 来使用,但是使用 Snoops,我可以看到 CallUserControl 的数据上下文没有绑定到视图模型(Snoops 中的数据上下文显示为空)。

通过代码,我可以看到 CallViewModel 正在创建并分配给定位器中的对象,但 UserControl 的数据上下文没有绑定到这个新创建的对象。

我正在创建新的 CallViewModel 如下:

你知道为什么这个新的 ViewModel 不会绑定到新的 Model 吗?是否有一些类似于 NotifyPropertyChanged 的​​机制,我必须从定位器调用以获取要绑定的对象?

0 投票
3 回答
6125 浏览

c# - 使用 MVVMLight 在 ViewModel 之间传递参数

我在使用 MVVMLight 框架中的 Messenger 类在我的 ViewModel 之间传递参数时遇到问题。

这是我正在使用的代码:

视图模型定位器

主视图模型

第二视图模型

在我的MainViewModel(ShowPersonDetailsCommand) 中,我正在导航到 SecondPage 并在 Messenger 类中发送一个人作为参数。在这一点上,这个人被很好地构建并作为消息发送。

但是在SecondViewModel构造函数中,这个人是空的:(

有什么我想念的吗?

我觉得我做错了什么...

供您参考 :

  • Windows Phone 8.1 (Silverlight)

  • MVVMLight 5.0.2

  • 视觉工作室 2013 更新 4

0 投票
1 回答
1670 浏览

c# - XML 命名空间“clr-namespace:namespaceblabla;assembly=blabla”中的未知类型“ViewModelLocator”

我正在构建一个 Windows Phone 8.1 项目,并且我正在使用仅 MVVM Light Libraries 库。我创建了一个 PCL 项目来保存我的 ViewModel,以便以后可以将它们用于 Windows Store 项目。

我按照指南http://blog.galasoft.ch/posts/2014/04/building-a-universal-application-for-windows-phone-8-1-and-windows-8-1-with-mvvm -光/

但我得到标题中的错误?

我的应用程序.xaml

我在 Windows Phone 项目中引用了 Roadsmart.Lib。 参考

我的 Lib 项目的属性

Lib 项目的属性

但是 Blend 能够找到我的 ViewModel 吗?

混合数据绑定

但我无法构建、运行。我也试过打扫。

错误信息

有人知道我做错了什么吗?

提前致谢

0 投票
2 回答
975 浏览

c# - MVVM 轻应用程序 - 如何正确清理 ViewModels

我正在开发 WPF 中的食谱窗口应用程序,它由一个窗口和几个用户控件组成,这些用户控件使用来自 MVVM Light 的消息用 relayCommands 相互替换。

该应用程序使用从 entityFramework 生成的数据库。除了第一次执行文件之外,出现的问题是程序显示了许多警告和错误,例如:

在 ViewModelLocator 我有这个:

我用来切换 userControls 的消息也在创建 ViewModels 的新实例,例如:

我玩弄了 ViewModel 以使它们成为单例,以确保系统中只有单个副本,但 SimpleIoc 需要公共构造函数进行注册。而且我不知道这是否会帮助我解决问题。另外我没有告诉你的是 ViewModelLocator 仅在 xaml 中使用,所以我什至没有它的实例来清理这些东西。(我可能用错了,但我不知道应该怎么用)

问题是我不知道如何以及在哪里清理所有 ViewModel,因为它们是在我提到的许多地方创建的,其中一些可能保存 *.mdf 文件。

0 投票
3 回答
2933 浏览

wpf - MVVM - 使用多个 ViewModel 重用视图

我相信 MVVM 的主要好处之一是解耦,绑定和缺乏引用使事情更加可重用。

我发现的所有 MVVM 示例都有某种带有 ViewModel 的 View,其名称ExampleViewExampleViewModel. 并且始终是一对一的关系,一个视图,一个视图模型。

但是在我当前的项目中,我有一个要填写的表单,因此可以将数据添加到数据库中,用户也可以选择编辑数据库上的数据,因此这个表单 View 可以与两个不同的 ViewModel 透明地使用,一种用于添加数据,一种用于编辑数据。我发现复制和粘贴整个 View 只是为了让它以其 ViewModel 命名有点愚蠢,不仅如此,如果我需要更改某些东西,它总是必须加倍工作,并且可能会忘记一些东西。

一些框架有一个 ViewModel 定位器,它将使用相同的命名约定自动将 View 与 ViewModel 绑定,这让我质疑 View 与许多不同 ViewModel 的可重用性。

我的问题基本上是:将一个视图与不同的视图模型一起使用是否有问题?这是不好的做法吗?这种特殊情况是否有任何命名约定?

缺乏可重用性的例子让我质疑这种做法的有效性。

0 投票
3 回答
2910 浏览

c# - 如何使用依赖注入构造函数注册一个类?(SimpleIoC)

我在我的项目中使用 MVVM Light,但我不确定如何在 ViewModelLocator 类中注册一个 Viewmodel 类,该类在其构造函数中带有一个参数。

我查看了IoC 上的文档,但没有看到任何与使用依赖注入构造函数注册类相关的内容,即带有参数的类。

在我要注册的类中,构造函数在它的参数中采用一个列表,如下所示:

但是当我导航到 ViewModel 类时,我得到一个 ActivationException,详细信息:

“Microsoft.Practices.ServiceLocation.ActivationException 未被用户代码处理 HResult=-2146233088 消息=无法注册:在 ViewSubjectGradeViewModel 中找到了多个构造函数,但没有一个用 PreferredConstructor 标记。来源=GalaSoft.MvvmLight.Extras StackTrace:在 GalaSoft.MvvmLight.Ioc.SimpleIoc .GetPreferredConstructorInfo(IEnumerable`1 constructorInfos, Type resolveTo) at GalaSoft.MvvmLight.Ioc.SimpleIoc.GetConstructorInfo(Type serviceType) at GalaSoft.MvvmLight.Ioc.SimpleIoc.Register[TClass](Boolean createInstanceImmediately) at GalaSoft.MvvmLight.Ioc.SimpleIoc .RegisterTClass 在 LC_Points.ViewModel.ViewModelLocator..ctor() 在 LC_Points.LC_Points_WindowsPhone_XamlTypeInfo.XamlTypeInfoProvider.Activate_0_ViewModelLocator() 在 LC_Points.LC_Points_WindowsPhone_XamlTypeInfo。XamlUserType.ActivateInstance() 内部异常:“

有谁知道如何解决此错误并指定“PreferredConstructor”?

错误本身在我注册 ViewModel 类的行中引发:

在此处输入图像描述

这是我的 ViewModelLocator 类,其中定义了 VM 的注册: