1. Prism系列之数据绑定

Prism系列之数据绑定


文章目录

  • Prism系列之数据绑定
    • 一、安装Prism
    • 二、实现数据绑定
    • 三、更换数据源


一、安装Prism

  1. 创建一个WPF工程,创建名为 PrismNewSample 的WPF项目。
    在这里插入图片描述

  2. 使用管理解决方案的Nuget包
    在这里插入图片描述

在上面或许我们有个疑问?

为啥安装prism会跟Prism.Unity有关系,我们知道Unity是个IOC容器, 而Prism本身就支持IOC, 且目前官方支持几种IOC容器:

在这里插入图片描述

  1. 且unity由于是微软官方的,且支持prism的组件化,由此我推荐使用prism.unity,在官方文档中prism7不支持prism.Mef,Prism 7.1将不支持prism.Autofac
  2. 安装完prism.unity就已经包含着所有prism的核心库了,架构如下:
    在这里插入图片描述

二、实现数据绑定

创建Views文件夹和ViewModels文件夹,将MainWindow放在Views文件夹下,再在ViewModels文件夹下面创建MainWindowViewModel类,如下:
在这里插入图片描述
xaml代码如下:

<Window x:Class="PrismNewSample.Views.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:PrismNewSample.Views"xmlns:prism="http://prismlibrary.com/"prism:ViewModelLocator.AutoWireViewModel="True"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><StackPanel><TextBox Text="{Binding Text}" Margin="10" Height="100" FontSize="50" Foreground="Black" BorderBrush="Black"/><Button  Height="100" Width="300" Content="Click Me" FontSize="50" Command="{Binding ClickCommnd}"/></StackPanel>
</Window>

ViewModel代码如下:

using Prism.Commands;
using Prism.Mvvm;namespace PrismNewSample.ViewModels
{public class MainWindowViewModel : BindableBase{private string _text;public string Text{get { return _text; }set { SetProperty(ref _text, value); }}private DelegateCommand _clickCommnd;public DelegateCommand ClickCommnd =>_clickCommnd ?? (_clickCommnd = new DelegateCommand(ExecuteClickCommnd));void ExecuteClickCommnd(){this.Text += "Click Me!";}public MainWindowViewModel(){this.Text = "Hello Prism!";}}
}

首先我们在App需要引入prism,修改Applicationprism:PrismApplication且删除StartupUri

App.xaml

<prism:PrismApplication  xmlns:prism="http://prismlibrary.com/" x:Class="PrismNewSample.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:PrismNewSample"><Application.Resources></Application.Resources>
</prism:PrismApplication>

App.xaml.cs

using Prism.Ioc;
using Prism.Mvvm;
using Prism.Unity;
using PrismNewSample.ViewModels;
using PrismNewSample.Views;
using System.Windows;
namespace PrismNewSample
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : PrismApplication{//设置启动起始页protected override Window CreateShell(){return Container.Resolve<MainWindow>();}protected override void RegisterTypes(IContainerRegistry containerRegistry){}//配置规则protected override void ConfigureViewModelLocator(){base.ConfigureViewModelLocator();ViewModelLocationProvider.Register<MainWindow, MainWindowViewModel>();}}
}

启动程序:
在这里插入图片描述

点击按钮:
在这里插入图片描述
可以看到,我们已经成功的用prism实现数据绑定了,且View和ViewModel完美的前后端分离。

三、更换数据源

新建一个Foo类作为自定义类

using Prism.Commands;
using Prism.Mvvm;namespace PrismNewSample.ViewModels
{public class Foo : BindableBase{private string _text;public string Text{get { return _text; }set { SetProperty(ref _text, value); }}public Foo(){this.Text = "Foo";}private DelegateCommand _clickCommnd;public DelegateCommand ClickCommnd =>_clickCommnd ?? (_clickCommnd = new DelegateCommand(ExecuteClickCommnd));void ExecuteClickCommnd(){this.Text = "I'm Foo!";}}
}

App.xaml.cs

using Prism.Ioc;
using Prism.Mvvm;
using Prism.Unity;
using PrismNewSample.ViewModels;
using PrismNewSample.Views;
using System.Windows;
namespace PrismNewSample
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : PrismApplication{//设置启动起始页protected override Window CreateShell(){return Container.Resolve<MainWindow>();}protected override void RegisterTypes(IContainerRegistry containerRegistry){}//配置规则protected override void ConfigureViewModelLocator(){base.ConfigureViewModelLocator();ViewModelLocationProvider.Register<MainWindow, Foo>();}}}

启动程序:

在这里插入图片描述

点击 click Me 按钮:

在这里插入图片描述

这种直接的,不通过反射注册的自定义注册方式优先级会高点,在官方文档也说明这种方式效率会高点

且官方提供4种方式,其余三种的注册方式如下:

ViewModelLocationProvider.Register(typeof(MainWindow).ToString(), typeof(Foo)); ViewModelLocationProvider.Register(typeof(MainWindow).ToString(), () => Container.Resolve<Foo>());ViewModelLocationProvider.Register<MainWindow>(() => Container.Resolve<Foo>());

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/220692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java springboot+jsoup写一段爬虫脚本 将指定地址的 图片链接 文本 超链接地址存入自己的属性类对象中

首先 还是最基本的 要在 pom.xml 引入依赖 <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.14.1</version> </dependency>然后 我们可以在项目中创建一个属性类 我这里就叫 WebContent了…

STM32使用SIM900A、SIM800C、SIM800A完成短信发送、连接onenet上传数据、拨打电话_完整教程

一、前言 本篇文章介绍SIM800C 、SIM800A、SIM900A 等等系列的模块的常用AT指令,讲解模块的使用方法,演示短信发送、拨打电话、网络连接,与服务器通信等常用案例。 如果只是用到发送短信、拨打电话、连接网络通信、这些模块的AT指令是兼容的。 文章最后贴了完整的STM32代码…

关于put_response和get_response的总结

Response总结&#xff0c;共三种情况 &#xff08;1&#xff09;每一笔都等response -> 直接get_response 注意put_response的前提是当前的seq的body没有直接结束&#xff0c;这个body一定是最底层发req的那个seq的body &#xff08;2&#xff09;连续发送数据&#xff0…

龙芯loongarch64安装numpy报错“No module named ‘numpy.core._multiarray_umath‘”

前言 在之前编译安装Python3.8的文章中说明了,龙芯仓库的很多包都有问题,安装之后很多无法使用,比如安装numpy后,就会出现“No module named numpy.core._multiarray_umath” 问题复现 配置pip源 vim /etc/pip.conf 复制下面的内容并保存 [global] timeout = 60 index-url…

电力行业的革新者:配网故障定位系统引领行业进步

随着科技的不断发展&#xff0c;电力行业也在不断地进行改革和创新。在这个过程中&#xff0c;恒峰智慧科技设计的配网故障定位系统作为一种先进的技术手段&#xff0c;正逐步引领行业的进步。本文将详细介绍配网行波型故障预警与定位系统的工作原理、功能特点以及在电力行业中…

easyrecovery14破解个人版数据恢复软件下载

easyrecovery14是easyrecovery系列软件的新版本&#xff0c;也是目前行业领先的数据恢复软件&#xff0c;具备更快捷、更高效、更便捷三大特色&#xff0c;能够帮助用户轻松恢复电脑丢失的数据。目前软件支持恢复不同存储介质数据&#xff0c;包括硬盘、光盘、U盘/移动硬盘、数…

C++笔记汇总(随时更新)

你好&#xff0c;这里是争做图书馆扫地僧的小白。 个人主页&#xff1a;争做图书馆扫地僧的小白_-CSDN博客 目标&#xff1a;希望通过学习技术&#xff0c;期待着改变世界。 目录 前言 一、C语言向C语言过度的知识点 二、C语言的相关知识 总结 前言 2023.12.13 之前撰写的笔…

ProcessOn在线绘制部分项目流程图

目录 一、ProcessOn 1.1 简介 1.2 官方网站 二、Axure自定义元件库 2.1 新建元件库 2.2 自定义元件 2.3 添加元件库 三、HIS系统门诊流程图 四、HIS系统住院流程图 五、HIS系统药品采购入库流程图 六、OA会议流程图 一、ProcessOn 1.1 简介 ProcessOn是一款在线的流…

后台业务管理系统原型模板,Axure后台组件库(整套后台管理页面)

后台业务系统需要产品经理超强的逻辑思维能力和业务理解能力&#xff0c;整理了一批后台原型组件及完整的用 Axure 8 制作的后台系统页面&#xff0c;方便产品经理们快速上手制作后台原型。 包括交互元件、首页、商品、订单、库存、用户、促销、运营、内容、统计、财务、设置、…

备忘录在手机哪里 这个方法轻松让轻松找到

作为一个常常忙于各种事务的人&#xff0c;我经常需要记录一些重要的事情&#xff0c;以免忘记。以前我总是使用纸质备忘录&#xff0c;但是随着科技的发展&#xff0c;我现在开始使用手机备忘录。然而&#xff0c;有时候我会找不到备忘录在哪里&#xff0c;让我感到非常困扰。…

1、初识 llvm源码编译 及virtualbox和ubuntu环境搭建

很久没更新了&#xff0c;最近准备研究逆向和加固&#xff0c;于是跟着看雪hanbing老师学习彻底搞懂ollvm&#xff0c;终于把所有流程跑通了&#xff0c;中间遇到了太多的坑&#xff0c;所以必须记录一下&#xff0c;能避免自己和帮助他人最好。 环境搭建太重要了&#xff0c;…

Github、Gitee优秀的开源项目分享

先赞后看&#xff0c;养成习惯&#xff01;&#xff01;&#xff01;❤️ ❤️ ❤️ 资源收集不易&#xff0c;如果喜欢可以关注我哦&#xff01; ​如果本篇内容对你有所启发&#xff0c;欢迎访问我的个人博客了解更多内容&#xff1a;链接地址 ​ Java 项目 javacore - Java …

差分数组详解,一维二维差分

文章目录 差分数组引言差分数组的定义二维差分数组二维差分数组代码实现 总结OJ练习 差分数组 引言 如果给你一个包含500个元素的数组&#xff0c;让你把从第一个元素到第100个元素的值都加上1&#xff0c;你会毫不犹豫的说枚举&#xff01;那么如果给你一个包含5000万个元素的…

03 python循环语句

3.1while循环基本语法 # 演示while循环的基础应用i0 while i<100 :print(不到100)i 1while循环基本案例 import random num random.randint(1, 100) count 0 while True:guess_num int(input(随机输入数字&#xff1a;))count 1if guess_num num :print(jie shu)br…

qiankun中主系统启动子系统本地静态图片加载404或者跨域问题

由于本地启动主系统和子系统&#xff0c;如果主系统内不放子系统的图片就会导致主系统访问不到子系统的图片 对于这个问题有三种解决方案&#xff0c;这里一一说明 1、第一种也是我常用的&#xff0c;就是把子系统中的静态图片全部转为base64这样通过主系统访问的时候就不是通…

为什么我的流量卡流量没有全部到账?是什么情况?

为什么我的流量卡流量没有全部到账&#xff1f;是什么情况&#xff1f; 网上的的流量套餐虽然便宜&#xff0c;但是有网友却反应&#xff0c;流量卡在激活之后出现“购买的套餐与实际流量不符合”的情况&#xff0c;这到底是什么原因呢&#xff1f; “流量卡和实际流量不符”&a…

HAAS 哈斯机床 读写刀补数据

哈斯机床不管是串口机床还是网口机床 都提供了Q命令 可以使用Q命令 进行刀具补偿的读取和写入 最多支持200把刀的 读取和写入

beanshell、jcef

BeanShell BeanShell是一个小型嵌入式Java源代码解释器&#xff0c;具有对象脚本语言特性&#xff0c;能够动态地执行标准JAVA语法。 BeanShell不仅仅可以通过运行其内部的脚本来处理Java应用程序&#xff0c;还可以在运行过程中动态执行你java应用程序执行java代码。因为Bea…

如何在 VeriStand 中设置反射内存通道

环境 硬件 cPCI-5565PIORC 软件 VeriStand 我正在设置我的反射内存 PXI 卡&#xff08;例如 cPCI-5565PIORC&#xff09;。 我可以在我的 PXI 系统之间使用反射内存发送/接收什么&#xff1f; 如何设置我的 PXI 系统之间共享的通道&#xff1f; 使用反射内存&#xff0c;您…

水闸水雨情监测设施建设项目

功能设计 在水闸上、下游挡墙外侧各安装1套雷达水位计&#xff0c;水闸屋顶布置个雨量计&#xff0c;水位及雨量监测数据的采集与传输主要是实时的完成水位、雨量数据的采集与处理&#xff0c;并按照设定的工作方式、时间间隔、增量范围将数据上传至扬压力监测站边缘计算终端&…