在MVVM中加载界面后执行方法或者事件(行为behaviour)

2023-12-18 10:40

本文主要是介绍在MVVM中加载界面后执行方法或者事件(行为behaviour),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里主要说的是WPF,并且是prism框架中使用。如果不是prism框架也是可以的,代码中,把关于prism的框架去掉即可。

业务:比如我们加载界面完成后,让界面默认执行一个方法,或者执行一个点击事件。

1.首先安装prism的框架,建立好MVVM模式,这里就不说了。

2.在项目中加入2个重要的dll

Microsoft.Expression.Interactions

System.Windows.Interactivity

最终结构是:

3.前台界面代码

<Window x:Class="WpfApp1.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:prism="http://prismlibrary.com/"prism:ViewModelLocator.AutoWireViewModel="True"xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" mc:Ignorable="d" Title="MainWindow"><i:Interaction.Triggers><!--这里必须是Load,否则报错--><i:EventTrigger EventName="Loaded" ><!--View_Loaded关联VM中的View_Loaded事件--><ei:CallMethodAction MethodName="View_Loaded" TargetObject="{Binding}"  /></i:EventTrigger></i:Interaction.Triggers><Grid><StackPanel Orientation="Vertical" ><Button Content="打开A" Margin="5" Command="{Binding OpenCommand}" CommandParameter="ViewA"><i:Interaction.Triggers><!--这里必须是Load,否则报错--><i:EventTrigger EventName="Loaded"  ><!--ButtonA_Click关联VM中的ButtonA_Click事件--><ei:CallMethodAction MethodName="ButtonA_Click" TargetObject="{Binding}"  /></i:EventTrigger></i:Interaction.Triggers></Button></StackPanel></Grid>
</Window>

4.MainWindowViewModel层代码

using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;namespace WpfApp1
{public class MainWindowViewModel : BindableBase{public DelegateCommand<string> OpenCommand { get; set; }public MainWindowViewModel(){OpenCommand = new DelegateCommand<string>(Open);}private void Open(string obj){MessageBox.Show("Test  " + obj);}public void View_Loaded(object sender, EventArgs e){MessageBox.Show("123");}public void ButtonA_Click(object sender, EventArgs e){//这里按照事件理解,e就是参数,也可以删除简写,加上引用Open(((System.Windows.Controls.Primitives.ButtonBase)((RoutedEventArgs)e).Source).CommandParameter.ToString());}}
}

5.当我们运行的时候,先弹View_Loaded里面的内容,再弹ButtonA_Click里面的内容 ,效果。

注意:上面的方法可能出现版本的错误,使用下面方法:

1.建立好项目后,安装Microsoft.xaml.Behaviors

2.View界面代码

<Window x:Class="rwerw.MainWindow1"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:rwerw" xmlns:behaviour="http://schemas.microsoft.com/xaml/behaviors"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><Button Content="Button" HorizontalAlignment="Left" Margin="229,218,0,0" VerticalAlignment="Top" Width="75"><behaviour:Interaction.Triggers><behaviour:EventTrigger EventName="Click"><behaviour:CallMethodAction TargetObject="{Binding}" MethodName="Button_Click" /></behaviour:EventTrigger></behaviour:Interaction.Triggers></Button></Grid>
</Window>

3.VM中的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;namespace rwerw.ViewModels
{public class MainViewModel{public void Button_Click(object sender, EventArgs e){MessageBox.Show("123");}}
}

 注意点:

1.引用 xmlns:behaviour="http://schemas.microsoft.com/xaml/behaviors"

2.VM中写public, public void Button_Click(object sender, EventArgs e)

3.V和VM之间关联,   this.DataContext = new MainViewModel();

来源:在MVVM中加载界面后执行方法或者事件(行为behaviour)-CSDN博客

这篇关于在MVVM中加载界面后执行方法或者事件(行为behaviour)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/508095

相关文章

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

Nginx安全防护的多种方法

《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直