title author date CreateTime categories
win10 UWP MvvmLight入门
lindexi
2019-09-02 12:57:38 +0800
2018-2-13 17:23:3 +0800
Win10 UWP

安装MvvmLight

我们安装的是MvvmLightLib。

右击项目,管理Nuget,搜索MVVM

安装第二个。他包含了运行的类库,我们将会使用里面的一些类。关于lib包含的库,参见:http://www.cnblogs.com/manupstairs/p/4890300.html

新建ViewModel文件夹

右击项目,新建文件夹ViewModel和View、Model三个文件夹。

在ViewModel文件夹新建类ViewModelLocator。

打开App.xaml

添加命名空间xmlns:viewModel="using:项目.ViewModel"

其中项目为你新建项目的名称

添加资源作为全局的ViewModel管理

    <Application.Resources>
<ResourceDictionary>
<viewModel:ViewModelLocator x:Key ="ViewModelLocator"></viewModel:ViewModelLocator>
</ResourceDictionary>
</Application.Resources>

接着假如我们有两个页面,一个是MainPage,一个是ChangeControlPage,那么我们就在ViewModel文件夹新建两个类MainModel和ChangeControlModel

他们继承ViewModelBase

接着在ViewModelLocator添加属性

 public ViewModel ViewModel => ServiceLocator.Current.GetInstance<ViewModel>();

注意,ViewModel 是多个ViewModel,也就是MainModel和ChangeControlModel,写法就是代换ViewModel为你的ViewModel

我们需要在ViewModelLocator的构造上用SimpleIoc.Default.Register

        public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(()=>SimpleIoc.Default); SimpleIoc.Default.Register<ViewModel>();
}

接着打开MainPage.xaml,原来是在cs写我们的ViewModel实例,现在我们可以直接在xaml

    <Page.DataContext>
<Binding Source="{StaticResource ViewModelLocator}" Path="ViewModel"></Binding>
</Page.DataContext>

当然我们可以换个方式

    DataContext="{Binding Source={StaticResource ViewModelLocator},Path=ViewModel}"

绑定

我们先在ViewModel中新建字段_str,我们绑定到xaml

        public string Str
{
set
{
Set(ref _str, value);
}
get
{
return _str;
}
} private string _str;
        <TextBlock Text="{Binding Path=Str,Mode=OneWay}"
HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>

我们可以把命令绑定到ViewModel,写法垃圾

        public ViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
Navigate = new RelayCommand(NavigateHigPage);
} public ICommand Navigate
{
set;
get;
} private void NavigateHigPage()
{ }

我们继续做从Main跳到第二页面,第二页面叫HigPage

首先打开ViewModelLocator,在构造写一个帮我们传页面信息NavigationService

            var navigationService = new NavigationService();
navigationService.Configure("main",typeof(MainPage));
navigationService.Configure("hig",typeof(HightClipPage));
SimpleIoc.Default.Register<INavigationService>(() => navigationService);

在需要跳转的函数

        private void NavigateHigPage()
{
var navigateService = ServiceLocator.Current.GetInstance<INavigationService>();
navigateService.NavigateTo("hig","hellow");
}

我跳转到第二页面,然后给他参数hellow

参考

http://www.cnblogs.com/manupstairs/

2019-9-2-win10-UWP-MvvmLight入门的更多相关文章

  1. win10 uwp MVVM入门

    MVVM 是一个强大的架构,基本从 WPF 开始,wr(我说的就是微软)就提倡使用 MVVM.它可以将界面和后台分离,让开发人员可以不关心界面是怎样,全心投入到后台代码编写中. 然后在编写完后台代码后 ...

  2. win10 uwp MVVM 轻量框架

    如果在开发过程,遇到多个页面之间,需要传输信息,那么可能遇到设计的问题.如果因为一个页面内包含多个子页面和多个子页面之间的通信问题找不到一个好的解决方法,那么请看本文.如果因为ViewModel代码越 ...

  3. win10 uwp 手把手教你使用 asp dotnet core 做 cs 程序

    本文是一个非常简单的博客,让大家知道如何使用 asp dot net core 做后台,使用 UWP 或 WPF 等做前台. 本文因为没有什么业务,也不想做管理系统,所以看到起来是很简单. Visua ...

  4. win10 uwp win2d CanvasVirtualControl 与 CanvasAnimatedControl

    本文来告诉大家 CanvasVirtualControl ,在什么时候使用这个控件. 在之前的入门教程win10 uwp win2d 入门 看这一篇就够了我直接用的是CanvasControl,实际上 ...

  5. win10 uwp 通过 Win2d 完全控制笔迹绘制逻辑

    本文来告诉大家如何通过 Win2d 完全控制笔迹绘制逻辑,本文适合用来实现复杂的自定义逻辑,可以完全控制笔迹的行为.包括在书写过程中切换模式,如进行手势擦除切换为橡皮擦模式 本文提供的方法适合用来做复 ...

  6. win10 uwp 入门

    UWP是什么我在这里就不说,本文主要是介绍如何入门UWP,也是合并我写的博客. 关于UWP介绍可以参见:http://lib.csdn.net/article/csharp/32451 首先需要申请一 ...

  7. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

    安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...

  8. UWP开发入门系列笔记之(一):UWP初览

    标签: 随着微软Build2015带来的好消息,Win10正式版发布的日子已经离我们越来越近了,我们也终于欣喜地看到:一个统一的Windows平台对于开发人员来说充满了吸引力,这局棋下的好大的说--于 ...

  9. [UWP]本地化入门

    1. 前言 上一篇文章介绍了各种WPF本地化的入门知识,这篇文章介绍UWP本地化的入门知识. 2. 使用resw资源文件实现本地化 在以前的XAML平台,resx资源文件是一种很方便的本地化方案,但在 ...

  10. win10 uwp 如何开始写 uwp 程序

    本文告诉大家如何创建一个 UWP 程序. 这是一系列的 uwp 入门博客,所以写的很简单 本文来告诉大家如何创建一个简单的程序 安装 VisualStudio 在开始写 UWP 需要安装 Visual ...

随机推荐

  1. Springboot 默认cache

    1:Springboot 默认缓存为ConcurrentMapCacheManager(spring-context) 2:再启动类上开启缓存 @SpringBootApplication //相当于 ...

  2. 记人生中第一场认真打的CF——CF1000(虽然是Virtual participation)

    老师说下午要让我们(来自开明的新高一同学)感受一下CF,于是下午2:20我们就集中到了机房.老师教我们用Educational Codeforces Round 46 (Rated for Div. ...

  3. OC + RAC (三) 信号中的信号

    -(void)_test3{ RACSubject *signalofsignal = [RACSubject subject]; //信号中的信号(也就是发送的数据是信号) RACSubject * ...

  4. elasticsearch6.8.1 x-pack插件破解

    一.为什么要破解x-pack?       因为涉及到了ES服务的安全性.ES服务如果被劫持,数据直接会被删除.ES登录账号和密码的设置是通过x-pack来实现的,官方只给了免费的30天的使用权,而且 ...

  5. 【HDOJ6630】permutation 2(递推)

    题意:给定x,y,n,有标号从1到n的n个数组,求合法的排列个数模998244353使得 1:p[1]=x 2:p[n]=y 3:相邻两项的差的绝对值<=2 n<=1e5 思路: #inc ...

  6. P哥的桶(线段树+线性基)

    https://www.luogu.org/problem/P4839 题目: 有两个操作 1 a b  在a的位置添加b数值  (注意一个位置可以有多个值) 2 a b : 在 a到b的范围任取任意 ...

  7. 从有状态应用(Session)到无状态应用(JWT),以及 SSO 和 OAuth2

    不管用哪种方式认证用户,都可能被中间人攻击窃取 SessionID 或 Token,从而发生 CSRF 攻击.解决方式就是全站 HTTPS.现在 Let's Encrypt 已经支持免费的通配符 HT ...

  8. vue分页练习

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. no suitable ctr exists to convert from 'int' to 'std::basic_string<char,std::char_traits<char>,std::allocator<char> >

    int xfun(int *a,int n) { int x = *a;//a的类型是int *,a+1跳动一个int的长度 ; pa < a + n; pa++)//指向同一个类型的指针比较大 ...

  10. postman测试wsdl类型接口

    1 IP地址来源搜索 WEB 服务 接口信息 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl 2  设置接口调用地址 ...