- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景
嗨,所有 SO 观众。我通常是一名 Android 开发人员,但现在我正在开发一个针对 WPF 和 Android 的跨平台应用程序。话虽如此,实际上没有关于如何直接做我想做的事情的信息。因此,我最终找到了一个由 3 部分组成的博客系列,该系列深入探讨了如何开发基于 Windows 的跨平台 MVVM 项目。只要我将 PCL 设置为与 Xamarin.Android 兼容,任何不会引发错误的代码都应该在我使用 Android 方面工作。以下是博客文章的链接:Blog 1 , Blog 2 , Blog 3 .同样,我使用 Android,所以我是为 WPF 应用程序编写代码的新手。
问题
所以我今天的问题只涉及与上述链接的博客文章相关的 PCL-WPF 方面。我尽可能地遵循帖子中列出的每一步。该博客使用 WinRT 和 WinPhone 作为两个目标平台,所以我不得不尝试自己解决问题,以使事情在 WPF 上运行。我必须做的两件事是使用 IsolatedStorage
并且基本上使用 WinPhone App.Xaml
使 WPF 端构建。
我已经完成了博客一直到最后并且构建成功。我什至可以看到我的示例调试行,就像它在第三篇博文末尾谈到的那样。但是,当我运行它时,我得到以下信息:
ActivationException was unhandled by user code
An exception of type 'Microsoft.Practices.ServiceLocation.ActivationException' occurred in GalaSoft.MvvmLight.Extras.dll but was not handled in user code
$exception {Microsoft.Practices.ServiceLocation.ActivationException: Type not found in cache: StackOverF.Services.IStorageService. at GalaSoft.MvvmLight.Ioc.SimpleIoc.DoGetService(Type serviceType, String key, Boolean cache) in c:\MvvmLight\Source\GalaSoft.MvvmLight\GalaSoft.MvvmLight.Extras (PCL)\Ioc\SimpleIoc.cs:line 537 at GalaSoft.MvvmLight.Ioc.SimpleIoc.GetService(Type serviceType) in c:\MvvmLight\Source\GalaSoft.MvvmLight\GalaSoft.MvvmLight.Extras (PCL)\Ioc\SimpleIoc.cs:line 789 at GalaSoft.MvvmLight.Ioc.SimpleIoc.MakeInstanceTClass in c:\MvvmLight\Source\GalaSoft.MvvmLight\GalaSoft.MvvmLight.Extras (PCL)\Ioc\SimpleIoc.cs:line 729} System.Exception {Microsoft.Practices.ServiceLocation.ActivationException}
using GalaSoft.MvvmLight.Command;
using StackOverF.Models;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StackOverF.ViewModels {
public interface IMainViewModel {
ObservableCollection<Workload> Workload { get; }
RelayCommand RefreshCommand { get; }
RelayCommand AddCommand { get; }
}
}
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using StackOverF.Models;
using StackOverF.Services;
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StackOverF.ViewModels {
public class MainViewModel : ViewModelBase,IMainViewModel {
private IDataService dataService;
public MainViewModel(IDataService dataService) {
this.dataService = dataService;
RefreshAsync();
}
private ObservableCollection<Workload> workload = new ObservableCollection<Workload>();
public ObservableCollection<Workload> Workload {
get {
return workload;
}
}
#region Commands
#region Refresh
private RelayCommand refreshCommand;
public RelayCommand RefreshCommand {
get {
return refreshCommand ?? (refreshCommand = new RelayCommand(async () => { await RefreshAsync();}));
}
}
private async Task RefreshAsync() {
workload.Clear();
foreach (Workload listing in await dataService.GetWorkloadAsync()) {
workload.Add(listing);
}
}
#endregion
#region Add
private RelayCommand addCommand;
public RelayCommand AddCommand {
get {
return addCommand ??
(addCommand = new RelayCommand(async () => {
Workload listing = new Workload() { Id = 3, Serial = "relay12" };
await dataService.AddWorkloadAsync(listing);
workload.Add(listing);
}));
}
}
#endregion
#endregion
}
}
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Ioc;
using Microsoft.Practices.ServiceLocation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StackOverF.Services {
public class DeviceLocatorService {
static DeviceLocatorService() {
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
if (ViewModelBase.IsInDesignModeStatic) {
}
else {
}
if (!SimpleIoc.Default.IsRegistered<IStorageService>())
SimpleIoc.Default.Register<IStorageService, StorageService>();
}
public static void Cleanup() {
}
}
}
using Microsoft.Practices.ServiceLocation;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Ioc;
using StackOverF.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StackOverF.Services {
public class LocatorService {
static LocatorService() {
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
// Services
if (ViewModelBase.IsInDesignModeStatic) {
SimpleIoc.Default.Register<IDataService, Design.DataService>();
}
else {
SimpleIoc.Default.Register<IDataService, Services.DataService>();
}
// View Models
SimpleIoc.Default.Register<IMainViewModel, MainViewModel>();
}
public IMainViewModel MainViewModel {
get {
return ServiceLocator.Current.GetInstance<IMainViewModel>();
}
}
public static void Cleanup() {
}
}
}
return ServiceLocator.Current.GetInstance<IMainViewModel>();
上出错(仅在调试时)线。
<Application x:Class="StackOverF.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
xmlns:services="clr-namespace:StackOverF.Services;assembly=StackOverF.PCL"
xmlns:deviceServices="clr-namespace:StackOverF.Services"
StartupUri="Views/MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<deviceServices:DeviceLocatorService x:Key="Locator.WPF" d:IsDataSource="True" />
<services:LocatorService x:Key="Locator" d:IsDataSource="True" />
</ResourceDictionary>
</Application.Resources>
</Application>
最佳答案
我的问题的解决方案比人们想象的要简单。 WPF
应用程序使用 MVVM
没有问题工具包/框架,但它们似乎确实存在共享问题。由于WPF
并非旨在成为跨平台友好的语言,因此编写此类内容的“正确”方式将不适用于它。
试图同时包含 LocatorService
App.xaml
中的类期待 WPF
运行两个类,如 WinRT
或 WinPhone
可能。 WPF
如果需要数据,似乎只引用一个类。就像在博客的例子中一样,我在 Main.xaml
绑定(bind)到 LocatorService
的数据类(class)。由于WPF
应用程序只运行该类的代码,它会抛出错误。
解决方案是结合 LocatorService
文件合并到一个文件中,在 WPF
上项目方。为什么在 WPF
你问一边?一个 Portable Class Library
应该只包含通用代码,可跨平台共享。
关于wpf - MVVM Light - PCL+WPF - 获取 Microsoft.Practices.ServiceLocation.ActivationException 类型的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35419503/
我需要为我正在处理的应用程序使用 Surface 项目模板,但我也想使用 MVVM Light Toolkit。我发现我可以“添加 | 新项目...”并为 View 、 View 模型或定位器选择一个
我正在使用MVVM Light,并且正在使用消息在ViewModel之间进行通信,以使ViewModel知道何时可以执行某些操作。我的问题是我注册了一条消息,然后多次收到它。因此,要使我的程序不止执行
我目前正在自学MVVM模式。 我第一次碰到了消息传递的概念。 我知道消息传递包含在mvvm-light工具包中。但是我找不到任何地方的用法示例(下载中未提供示例项目)。 如果有人可以指导我了解有关如何
使用Nuget安装MVVM Light Toolkit时,似乎没有安装MVVM Light的片段。 我在哪里可以找到它们? 最佳答案 片段可在 GitHub 上找到. 下载代码(右上角克隆或下载按钮)
我遇到了一个问题,即在 VS 或 Blend 中运行解决方案时,属性 IsInDesignMode 没有返回 true 的预期值。我的环境包括 Win Server 2008 R2、VS2010 Pr
如果我将消息从 ViewModelA 发送到 ViewModelB,是否有办法从我的单元测试中捕获此通知,该单元测试正在测试引发消息的 ViewModelA? Messenger.Default.Se
我尝试使用提供的示例 petstore openapi.json 生成项目。我用过light-codegen生成端点和模型。 我确实安装了 light-codegen: git clone https
这段代码告诉计算机做什么?附注“灯”是一个 boolean 数组。 for (int k = 1; k < lights.length; k++) lights[k]
我有一个包含几个对象和一些对象的场景,在这些情况下,我希望球体受到粉红色和蓝色灯光的影响。但我也有一个管几何结构,它应该只受白光影响,而不受粉红色和蓝色光的影响。 有关问题的演示,请参见下图:现在发生
我正在考虑开始使用 MVVM Light,并且遇到了"new"ICleanup 界面。我只是想知道你什么时候清理虚拟机......当你离开页面时? 另外,我看到 ViewModelLocator 中有
我有一个带有关联虚拟机的子窗口,每次我要求打开子窗口时都会创建该虚拟机。当子窗口打开时,它会为 MVVM Light 消息注册一个监听器。关闭窗口后,我很确定我正在释放对它的所有引用,但我实际上并没有
是否有 MVVM Light DispatcherHelper 可用于 PCL 的时间表?官博中只有备注,暂时不可用。 最佳答案 我刚刚添加了一个 nuget 包,它可以帮助您从 MvvmLight
我正在尝试按照此博客文章中的示例使用 MVVM Light 框架来实现 Metro 风格的分组项目页面,但使用 ViewModelLocator 来提供可混合性: http://mikaelkoski
我们有一个使用 MVVM Light 的 WP8 应用程序,它运行良好。但是,现在我们要使用 Xamarin 来定位 iOS。看来 MvvmCross 是更好的跨平台开发框架。 有没有人有改变这样的框
刚刚注意到 4.2.30 版本不包括 protected bool Set( ref T field, T newValue,
我已经开始使用最新的 MVVM Light 工具包 v4(NuGet 预览版 v4.1.21,DLL v:4.0.21.25725),它实现了 SimpleIOC 模式。 在我的 ViewModelL
我可以使用 Interaction.Triggers 捕获文本框上的 textchanged 事件,如下所示:
我希望这不是一个太愚蠢的问题:我刚刚开始使用 MVVM light(到目前为止很喜欢它!)。在“之前”(即使用 MVVML 之前),我必须通过 ui 分派(dispatch)任何会命中引发 INoti
我在 list 中使用了以下行: android:theme="@android:style/Theme.Light.NoTitleBar" 没有标题栏并在我的应用程序中显示精简版的 AlertDia
“ChainLight”类在其构造函数中有一个名为“rayDirection”的参数: ChainLight(rayHandler, rays, Color, distance, rayDirecti
我是一名优秀的程序员,十分优秀!