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