<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>WPF on 海蜇零的水缸</title>
        <link>https://JellyfishZero.github.io/categories/wpf/</link>
        <description>Recent content in WPF on 海蜇零的水缸</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Fri, 26 Jun 2026 15:23:17 +0800</lastBuildDate><atom:link href="https://JellyfishZero.github.io/categories/wpf/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>WPF 今天吃什麼</title>
        <link>https://JellyfishZero.github.io/WPF_WhatToEat/</link>
        <pubDate>Fri, 26 Jun 2026 15:23:17 +0800</pubDate>
        
        <guid>https://JellyfishZero.github.io/WPF_WhatToEat/</guid>
        <description>&lt;img src="https://JellyfishZero.github.io/WPF_WhatToEat/MainPage.png" alt="Featured image of post WPF 今天吃什麼" /&gt;&lt;h2 id=&#34;今天吃什麼餐廳抽選器&#34;&gt;「今天吃什麼」餐廳抽選器&lt;/h2&gt;
&lt;p&gt;建立自己的餐廳資料庫，透過隨機抽選與喜好程度加權，協助解決每天不知道要吃什麼的選擇困難。&lt;/p&gt;
&lt;p&gt;舊版專案為「賽米，這餐吃什麼？」是大學時期使用Windows Form做的，並且沒有採用DI和MVVM等架構，亦無SQLite資料庫支持。&lt;/p&gt;
&lt;h2 id=&#34;技術細節&#34;&gt;技術細節&lt;/h2&gt;
&lt;p&gt;本專案使用 &lt;strong&gt;C# / .NET 8 WPF&lt;/strong&gt; 開發桌面應用程式，採用 MVVM 架構分離畫面、狀態與操作邏輯，讓 UI 顯示與餐廳資料處理保持清楚的責任邊界。&lt;/p&gt;
&lt;h3 id=&#34;使用技術&#34;&gt;使用技術&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;.NET 8 WPF&lt;/strong&gt;：建立 Windows 桌面應用程式介面。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MVVM 架構&lt;/strong&gt;：以 ViewModel 管理畫面狀態與操作流程，降低 UI 與業務邏輯耦合。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entity Framework Core&lt;/strong&gt;：負責餐廳資料的存取與資料庫操作。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQLite&lt;/strong&gt;：作為本機資料庫，餐廳資料會儲存在使用者電腦中。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dependency Injection&lt;/strong&gt;：透過 &lt;code&gt;Microsoft.Extensions.DependencyInjection&lt;/code&gt; 管理 ViewModel、Service 與 DbContext 的建立。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RelayCommand&lt;/strong&gt;：封裝 WPF 指令綁定，讓按鈕操作可以直接對應到 ViewModel 行為。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;主要功能&#34;&gt;主要功能&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;新增餐廳資料&lt;/li&gt;
&lt;li&gt;查詢餐廳清單&lt;/li&gt;
&lt;li&gt;修改餐廳名稱、喜好程度與營業時間&lt;/li&gt;
&lt;li&gt;刪除餐廳資料&lt;/li&gt;
&lt;li&gt;依目前時間抽選正在營業的餐廳&lt;/li&gt;
&lt;li&gt;依餐廳喜好程度進行加權隨機抽選&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;抽選邏輯&#34;&gt;抽選邏輯&lt;/h3&gt;
&lt;p&gt;抽選時會先讀取資料庫中的所有餐廳，並依目前時間過濾出「現在可以吃」的店家。&lt;/p&gt;
&lt;p&gt;如果餐廳沒有設定營業時間，系統會視為全天候可抽選；如果有設定營業時間，則會比對當天營業區間，並支援跨日營業時段，例如 &lt;code&gt;22:00 ~ 02:00&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;完成營業狀態篩選後，系統會根據餐廳的喜好程度進行加權隨機抽選。喜好程度越高，被抽中的機率越高；最低也會保留基本權重，避免餐廳完全無法被抽中。&lt;/p&gt;
&lt;h3 id=&#34;資料儲存&#34;&gt;資料儲存&lt;/h3&gt;
&lt;p&gt;餐廳資料使用 SQLite 儲存在本機端，資料庫路徑位於使用者的 Local Application Data 目錄下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;%LOCALAPPDATA%\JellyfishZero_WhatToEat\WhatToEat.db
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;應用程式啟動時會自動建立或更新資料庫結構，確保資料表與目前程式版本一致。&lt;/p&gt;
&lt;h2 id=&#34;專案架構&#34;&gt;專案架構&lt;/h2&gt;
&lt;p&gt;WhatToEat&lt;/p&gt;
&lt;p&gt;├── Commands        # WPF ICommand 實作&lt;/p&gt;
&lt;p&gt;├── Data            # EF Core DbContext 與資料實體&lt;/p&gt;
&lt;p&gt;├── Helper          # 表單與營業時間輔助邏輯&lt;/p&gt;
&lt;p&gt;├── Models          # 餐廳資料操作服務&lt;/p&gt;
&lt;p&gt;├── ViewModels      # MVVM 狀態與操作邏輯&lt;/p&gt;
&lt;p&gt;├── Views           # WPF 視窗與 XAML 介面&lt;/p&gt;
&lt;p&gt;└── Migrations      # EF Core 資料庫遷移紀錄&lt;/p&gt;
&lt;h2 id=&#34;開發環境&#34;&gt;開發環境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Visual Studio 2022 或以上&lt;/li&gt;
&lt;li&gt;.NET 8 SDK&lt;/li&gt;
&lt;li&gt;Windows 作業系統&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;畫面預覽&#34;&gt;畫面預覽&lt;/h2&gt;
&lt;h3 id=&#34;主畫面&#34;&gt;主畫面&lt;/h3&gt;
&lt;img width=&#34;778&#34; height=&#34;443&#34; alt=&#34;螢幕擷取畫面 2026-06-26 135734&#34; src=&#34;https://github.com/user-attachments/assets/9d88420e-1f6e-45c9-ad57-fc7fb21853be&#34; /&gt;
&lt;h3 id=&#34;新增餐廳&#34;&gt;新增餐廳&lt;/h3&gt;
&lt;img width=&#34;785&#34; height=&#34;536&#34; alt=&#34;螢幕擷取畫面 2026-06-26 135918&#34; src=&#34;https://github.com/user-attachments/assets/b3007209-92e2-4e46-a887-f275e931233b&#34; /&gt;
&lt;h3 id=&#34;修改餐廳&#34;&gt;修改餐廳&lt;/h3&gt;
&lt;img width=&#34;840&#34; height=&#34;606&#34; alt=&#34;螢幕擷取畫面 2026-06-26 135941&#34; src=&#34;https://github.com/user-attachments/assets/c774daf6-2388-40b1-afd6-2e10e01a4244&#34; /&gt;
&lt;h3 id=&#34;刪除餐廳&#34;&gt;刪除餐廳&lt;/h3&gt;
&lt;img width=&#34;502&#34; height=&#34;269&#34; alt=&#34;螢幕擷取畫面 2026-06-26 140026&#34; src=&#34;https://github.com/user-attachments/assets/2a39beff-2f07-44a6-b9f9-493033011aad&#34; /&gt;
&lt;h3 id=&#34;查詢所有餐廳&#34;&gt;查詢所有餐廳&lt;/h3&gt;
&lt;img width=&#34;881&#34; height=&#34;536&#34; alt=&#34;螢幕擷取畫面 2026-06-26 140007&#34; src=&#34;https://github.com/user-attachments/assets/a5d3dc44-7da0-4d6f-b016-364034e60464&#34; /&gt;
&lt;h2 id=&#34;github&#34;&gt;GitHub&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/JellyfishZero/WPF_WhatToWat&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;前往專案GitHub&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
