C# WPF – MVVM實現OPC Client管理系統
- 2020 年 6 月 18 日
- 筆記
- [15] C# WPF, c#, MahApps.Metro, MVVM, OPC, Prism, VS2019, WPF
前言
本文主要講解採用WPF MVVM模式設計OPC Client的過程,算作對於WPF MVVM架構的學習記錄吧!不足之處請不吝賜教,感謝!
涉及知識點
- C#基礎
- Xaml基礎
- 命令、通知和數據綁定
- Prism+Blend
- MahApps.Metro(第三方框架)
- OPC
項目實現功能
- 用戶登陸(模擬登陸過程,未連接資料庫)
- OPC同步讀寫、非同步讀寫操作等
開發環境
- Window 10
- Visual Studio 2019
- .Net Framework 4.8
成品效果圖
項目詳解
MVVM框架搭建
為了節省開發時間,在事件綁定上使用了Prism框架,OPC通訊方面使用了OPCDAAuto.dll類庫,二者均可以通過Nuget方式安裝到項目中。
- 定義了一個DelegateCommand類用來處理屬性和命令;
- 定義了一個NotificationObject類用來通知屬性和命令的改變;
注意:在使用事件綁定時,需要添加引用 xmlns:i=”//schemas.microsoft.com/xaml/behaviors”,然後根據控制項對應事件的名稱設置綁定命令即可。
比如我們想給ComboBox的SelectionChanged事件設置一個事件綁定,可這麼寫
xaml程式碼:
<ComboBox x:Name="CombServerList" Width="120" Margin="{StaticResource ControlMargin}" ItemsSource="{Binding ServerList}"> <!-- 事件綁定 --> <i:Interaction.Triggers> <i:EventTrigger EventName="SelectionChanged"> <i:InvokeCommandAction Command="{Binding SelectionChangedCommand}" CommandParameter="{Binding ElementName=CombServerList}" /> </i:EventTrigger> </i:Interaction.Triggers> </ComboBox>
View Code
VM程式碼:
public ICommand SelectionChangedCommand { get { return new Prism.Commands.DelegateCommand<ComboBox>((combobox) => { // 業務邏輯 }); } }
View Code
相關類的定義程式碼如下:
public class DelegateCommand : ICommand { public event EventHandler CanExecuteChanged; /// <summary> /// 判斷判斷命令是否可以被執行 /// </summary> /// <param name="parameter"></param> /// <returns></returns> public bool CanExecute(object parameter) { if (this.CanExecuteFunc != null) { this.CanExecuteFunc(parameter); } else { return true; } return false; } /// <summary> /// 執行相關的函數或者命令 /// </summary> /// <param name="parameter"></param> public void Execute(object parameter) { if (this.ExecuteAction != null) { this.ExecuteAction(parameter); } else { return; } } /// <summary> /// 聲明一個委託用來執行命令對應的方法 /// </summary> public Action<object> ExecuteAction { get; set; } /// <summary> /// 聲明一個方法,用來判斷命令是否可以被執行 /// </summary> public Func<object, bool> CanExecuteFunc { get; set; } }
DelegateCommand
public class NotificationObject : INotifyPropertyChanged { /// <summary> /// 實現介面 /// </summary> public event PropertyChangedEventHandler PropertyChanged; /// <summary> /// 通知屬性的改變 /// </summary> /// <param name="propertyName"></param> public void RaisePropertyChanged(string propertyName) { if (this.PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } }
NotificationObject
UI介面搭建
這裡主要採用第三方開源框架MahApps.Metro,可以通過NuGet方式安裝到項目中,這裡不再展開講解,感興趣的朋友可以參考 MahApps.Metro – Quick Start
OPC相關處理
大致分為如下幾步:
- 獲取OPC服務列表
- 連接OPC服務
- 創建分組
- 獲取項目列表
- 添加項目到分組中
- 對項目的內容進行讀寫操作
比較簡單,不再展開了。
登陸介面
這裡我們說一說登陸介面的實現,由於追求PURE MVVM,所以這裡有三點需要說明一下:
- PasswordBox綁定
- 圓形頭像
- 登陸窗體切換
PasswordBox綁定:自定義幫助類,使用PasswordBoxBehavior實現綁定;
圓形頭像:自定義樣式,增加Image圓角屬性;
登陸窗體切換:藉助prism的shell。
至此,已全部結束。
作者:Jeremy.Wu
出處://www.cnblogs.com/jeremywucnblog/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。