WPF入门学习1---窗口Loaded事件与Command命令绑定


窗口Loaded事件与Command命令绑定

起因

  最近接到一个任务,需要做一系列上位机软件,功能挺简单的,应该能完成。但考虑现在已经2022年了,已经两三年没摸Winform的我,想趁此机会学习一下大名鼎鼎的WPF,以交付给老板相对现代一点的上位机软件。
  第一个上位机软件相对比较接单,主要由两个窗口组成,一个是登录窗口,一个是主窗口。

搞登录窗口

是我想简单了

  由于现在企业内已经普及了企业微信,且上位机对操作人员也是有登录要求的,所以我准备模仿微信的登录方式,二维码登录!那对于登录窗口来说,无非是Loaded事件中请求api,获取到一个识别code,显示到窗口的image控件中,然后操作端的员工通过企业微信扫码,再通过OAuth2识别出哪个员工,客户端上再获取到对应的信息,实现登录过程。但在试试的过程中,遇到的一个问题竟然是:Loaded与WPF的Command如何绑定?
  想起用单身二十几年的手速拖winform控件的那会儿,窗口的loaded事件不就是鼠标双击窗口,然后就是loaded事件生成了吗?(不得不说,拖控件真爽啊,可潮流趋势它来了,谁也挡不住!)我依样画葫芦,去WPF的LoginWindow.xaml中加了一个Loaded事件:

<Window x:Class="Deamon.Views.LoginWindow"
        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:Deamon.Views"
        mc:Ignorable="d"
        Title="LoginWindow" 
        WindowStyle="None"
        WindowStartupLocation="CenterScreen"
        WindowState="{Binding WindowStateValue,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
        Height="360" 
        Width="290"
        Loaded="LoginWindow_OnLoaded"
        >

而LoginWindow_OnLoaded事件就是:

 private void LoginWindow_OnLoaded(object sender, RoutedEventArgs e)
        {
            //登录窗口显示了

        }

这不是和winform一样简单吗?
那我接下去只要在这个事件中调用service层,请求API,获取数据,更新到对应的ViewModel中, 那二维码不就实现了吗?

进一步思考

  由于WPF带来的是我们现在经常使用的MVVM思想,也就是要求数据和视图要求分离的,松耦合。那我如果还是在LoginWindow.cs中编写请求数据操作,然后再赋给vm,这样又破坏了mvvm的相关原则,所以又问了百度亲娘和Google阿爹。果然,高手在搜索引擎中,

操作步骤

  先nuget上下载Microsoft.Xaml.Behaviors.Wpf这个包,然后在xaml中引用命名空间:```csharp
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"

然后xaml中的window中加入
```csharp
<b:Interaction.Triggers>
        <b:EventTrigger EventName="Loaded">
            <b:InvokeCommandAction Command="{Binding LoadedWindowCommand}"/>
        </b:EventTrigger>
    </b:Interaction.Triggers>

其中LoadedWindowCommand就是我在此窗口对应的vm中写好的command,这样就可以实现原本WPF中不能触发的Loaded的事件与Command绑定了。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM