iT邦幫忙

2025 iThome 鐵人賽

DAY 1
1
Software Development

30天快速上手製作WPF選股工具 — 從C#基礎到LiteDB與Web API整合系列 第 1

Day 1 - 為什麼選擇用C#與WPF來開發選股工具?系列簡介

  • 分享至 

  • xImage
  •  

這個系列的目標,是帶領初學者或有基礎的開發者,用30天的時間,從C#基本語法開始,一步步學會WPF的桌面應用程式開發,並最終完成一個能夠下載股票資料、儲存到本地資料庫、套用篩選策略的選股工具。

我是誰?
大家好,我是Akito,目前在美商Zealogics公司擔任Senior Developer,專注於C#/.NET技術,同時也有多年 Windows 桌面應用 (WPF/WinForm) 以及 網站開發的經驗。過去我曾參與金融、製造與醫療領域的專案,特別是在WPF介面設計、系統整合與單元測試方面有實務經驗。
我選擇以「製作WPF選股工具」為主題,主要是因為這能把程式語言學習和實際應用結合起來。希望透過這系列文章,能幫助初學者一步步掌握C#與WPF也讓有經驗的工程師能快速建立一個能落地使用的小工具。

為什麼是C#?
C#不一定是唯一能做到這件事的語言,但C#是微軟主力推廣的語言,結合Visual Studio/Rider開發環境,對初學者相對友好。不僅能做桌面應用,也能做WebAPI、資料處理甚至跨平台開發,對想要快速實作選股工具的人來說,是非常合適的選擇。

WPF? WTF?
WPF(Windows Presentation Foundation)是微軟推出的桌面應用程式UI開發框架,隸屬於 .NET平台的一部分。它的核心特色是使用XAML(Extensible Application Markup Language)來描述畫面,並且能與 C# 程式邏輯緊密結合。

WPF 的特點

  1. XAML + C# 分工
    XAML:負責畫面佈局與樣式
    C#:負責邏輯與資料處理
  2. 資料繫結 (Data Binding)
    可以讓 UI 和資料物件自動連動,例如股票清單更新時,畫面自動刷新。
    MVVM 架構
    支援將 資料 (Model)、邏輯 (ViewModel)、畫面 (View) 分開,程式碼更容易維護。
  3. 高度客製化
    支援 Style 與 Template,可以讓按鈕、表格、清單的外觀完全自訂。
  4. 強大的圖形與動畫
    WPF 使用 DirectX,能提供比 WinForms 更漂亮的 UI、動畫和視覺效果。

為什麼不用 WinForms?
很多人在學 C# 時,除了 Console App,第一個接觸的桌面應用大多是 WinForms。的確,WinForms 上手很快,拖拉控制項就能跑出一個畫面,對初學者很有成就感。

不過,WinForms 有一個常見的問題:
👉 畫面邏輯(UI Code) 和 商業邏輯(業務 Code) 很容易寫在同一個 Form 裡面。
這會導致:

  • 程式碼膨脹成「God class」(巨大的 Form.cs,動輒上千行)
  • 維護困難:要改 UI 結果動到邏輯,改邏輯又影響 UI
  • 測試不易:邏輯綁在 UI 裡面,單元測試變得非常麻煩

舉個例子,假設你要做一個「選股按鈕」:
在 WinForms 裡,很可能直接在 Button_Click 裡把 API 呼叫、資料篩選、UI 更新都寫在一起。
在 WPF(配合 MVVM)裡,這些責任會被分開:UI 負責顯示,ViewModel 負責邏輯,Model 負責資料。
結果就是:
WinForms:寫起來快 → 後期痛苦
WPF:一開始學習門檻稍高 → 長期更好維護、擴充性更好


WinForms 範例:
下面這段程式碼是不是很熟悉?


private void btnSelectStock_Click(object sender, EventArgs e)
{
    // 呼叫 API 抓資料
    var data = StockApi.GetStocks();
    
    // 篩選股票邏輯
    var filtered = data.Where(x => x.Price > 100).ToList();

    // 更新畫面
    listBox1.DataSource = filtered;
}

看起來很簡單,但問題是:

  • UI 更新 (listBox1.DataSource = ...) 跟 商業邏輯 (Price > 100) 綁死在一起。
  • 如果以後要測試「篩選邏輯」,得把整個 WinForms UI 拉起來才能跑。(不方便寫單元測試)
    程式越寫越大,整個 Form.cs 會變「God class」。

WPF + MVVM 範例:
換到 WPF,你會把責任分清楚:
ViewModel(邏輯):

public class StockViewModel : INotifyPropertyChanged
{
    public ObservableCollection<Stock> Stocks { get; set; } = new();

    public ICommand SelectStockCommand { get; }

    public StockViewModel()
    {
        SelectStockCommand = new RelayCommand(SelectStock);
    }

    private void SelectStock()
    {
        var data = StockApi.GetStocks();
        var filtered = data.Where(x => x.Price > 100).ToList();
        Stocks.Clear();
        foreach (var s in filtered) Stocks.Add(s);
    }
}

View(畫面,XAML):

<Button Content="選股" Command="{Binding SelectStockCommand}" />
<ListBox ItemsSource="{Binding Stocks}" />

這樣的好處是:

  • 邏輯獨立:篩選邏輯在 ViewModel,可以直接拿去寫單元測試。
  • UI 輕量:XAML 只負責「顯示什麼」,不關心邏輯。
  • 長期維護爽:改 UI 不會動到邏輯,改邏輯不會UI壞掉(改A壞B)。

總結:
在這篇文章裡,我們先聊了為什麼要選擇C#與WPF來作為這系列的基礎,並且簡單比較了WinForms與WPF的差異。或許你已經感受到,WPF雖然一開始學習門檻略高,但在長期維護與擴充性上會是更理想的選擇。

接下來的文章,我們會從C#語言基礎開始,循序漸進地帶你認識物件導向、集合、LINQ 等核心觀念,並逐步邁向 WPF 的世界。最終,我們將把這些知識串接起來,完成一個可以下載股票資料、儲存至本地資料庫、並套用篩選策略的 選股工具。

希望這個系列能成為你學習的地圖,也能讓你在30天之後,不只是學會語法,而是能親手打造出一個真正有價值的應用程式。


系列文
30天快速上手製作WPF選股工具 — 從C#基礎到LiteDB與Web API整合1
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言