文章速覽
- 1、技術棧
- 實現步驟
- 1、創建WPF工程項目
- 2、引入框架 Caliburn.Micro、數據可視化庫ScottPlot.WPF
- 3、創建文件夾,并創建相應的View & ViewModel
- 4、創建啟動類
- 5、將啟動類設置為啟動項
- 6、編寫View
- 7、編寫VM
- 8、將VM和View中的圖表進行綁定
- 9、備注
- 示例效果
堅持記錄實屬不易,希望友善多金的碼友能夠隨手點一個贊。
共同創建氛圍更加良好的開發者社區!
謝謝~
1、技術棧
WPF、MVVM、WPF開發框架Caliburn.Micro、開源的數據可視化庫ScottPlot.WPF。
ScottPlot.WPF 是一個開源的數據可視化庫,用于在WPF應用程序中創建高品質的繪圖和圖表。它基于ScottPlot庫的WPF版本,提供了簡單易用的API,使開發人員能夠通過簡單的代碼創建各種類型的圖表,如折線圖、散點圖、柱狀圖、餅圖等。
Caliburn.Micro是一個微軟開發的用于構建WPF,Silverlight和Windows Phone應用程序的MVVM(模型-視圖-視圖模型)框架。
實現步驟
1、創建WPF工程項目
2、引入框架 Caliburn.Micro、數據可視化庫ScottPlot.WPF
3、創建文件夾,并創建相應的View & ViewModel
注意:開發框架Caliburn.Micro 會根據名稱自動匹配View 和ViewModel,因此命名空間以及創建的xmal名和對應的vm名稱需要符合 【**View、**ViewModel】的規則
4、創建啟動類
創建一個Bootstrapper類,繼承開發框架Caliburn.Micro中的BootstrapperBase類,用于配置Caliburn.Micro的基礎設置,并指定應用程序的啟動視圖。
public Bootstrapper(){Initialize();}protected override void OnStartup(object sender, StartupEventArgs e){DisplayRootViewForAsync<ChartViewModel>();}
5、將啟動類設置為啟動項
打開App.xmal文件,刪除其中的StartupUri代碼行,并將我們創建的Bootstrapper設置為程序啟動項
<Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary> <local:Bootstrapper x:Key="Bootstrapper" /></ResourceDictionary></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources>
</Application>
6、編寫View
引入程序集ScottPlot.WPF,并添加UI元素WpfPlot,用以繪制圖表
xmlns:ScottPlot="clr-namespace:ScottPlot.WPF;assembly=ScottPlot.WPF"<ScottPlot:WpfPlot x:Name="WpfPlot1"/>
7、編寫VM
VM需要繼承Caliburn.Micro程序集中的Screen類,才可以使用我們引入的Caliburn.Micro MVVM框架
創建一個公開的WpfPlot類型的屬性,用以綁定View上的UI元素,需要引用ScottPlot.WPF命名空間
using ScottPlot.WPF;
private WpfPlot _PlotControl = new WpfPlot();
//圖表清空
PlotControl.Plot.Clear();
//增加一個點
PlotControl.Plot.Add.Scatter(x,y);
//自動軸距
PlotControl.Plot.Axes.AutoScale();
//圖表刷新
PlotControl.Refresh();
8、將VM和View中的圖表進行綁定
(DataContext as ChartViewModel)!.PlotControl = WpfPlot1;
其中的Load方法需要在xmal中進行聲明并綁定
9、備注
如果不設置為啟動項,而需要點擊按鈕打開我們的創建的MVVM框架的視圖,可以通過Caliburn.Micro命名空間中的WindowManager…ShowDialogAsync(vm);進行打開
示例
var windowManager = new WindowManager();
windowManager.ShowDialogAsync(vm);