WinUI3でのアプリ作成で、特に何も考えずに当たり前に使い始めてた、まあいわゆるプロジェクトのプロパティをVisual Studioで開くと左の一番下に「設定」って出る奴ね。これ、今のVisual Studio 2022とかでは確かに
「プロジェクト プロパティ経由では実行されなくなりました」とか出るんですよね。それでもWindowsフォームアプリでは使い続けてました。これ、Copilotの説明だと.NETなんかの流れらしく、WinUI3とかでは推奨されないらしい。で、ApplicationData.Current.LocalSettingsが推奨されるって事で本日午前中はこの修正で終わりました😅
まだまだ全然C#も初心者だし、WinUI3とかもそうなんですが、これまでのSettings.settingsに変えて、今後使用するべく
public static class AppSettings { // 🔹 アプリケーション設定のキー // // 文字列取得・設定の例 // string dbPath = AppSettings.Get("JVD_DB"); // AppSettings.Set("Theme", "Light"); // // 整数取得・設定の例(オーバーロード) // int retry = AppSettings.GetInt("MaxRetry", 5); // AppSettings.Set("MaxRetry", retry + 1); // // 真偽値取得・設定の例(オーバーロード) // bool logging = AppSettings.GetBool("EnableLogging"); // AppSettings.Set("EnableLogging", !logging); // 初期値定義(すべて文字列) private static readonly Dictionary<string, string> DefaultSettings = new() { { "JVD_DB", "JVData.db" }, { "UserDB", "UserData.db" }, { "AnalyzeDB", "Analyze.db" } }; private static readonly ApplicationDataContainer _settings = ApplicationData.Current.LocalSettings; public static bool IsInitialized => _settings.Values.ContainsKey("Initialized"); public static void InitializeDefaults() { if (!IsInitialized) { foreach (var kvp in DefaultSettings) _settings.Values[kvp.Key] = kvp.Value; _settings.Values["Initialized"] = true; } } public static void ResetToDefaults() { foreach (var kvp in DefaultSettings) _settings.Values[kvp.Key] = kvp.Value; } // 🔹 基本型の取得 public static string Get(string key) { if (_settings.Values.TryGetValue(key, out var value)) return value as string ?? DefaultSettings.GetValueOrDefault(key, ""); else return DefaultSettings.GetValueOrDefault(key, ""); } public static void Set(string key, string value) { _settings.Values[key] = value; SettingChanged?.Invoke(key, value); } // 🔹 型付き取得 public static int GetInt(string key, int defaultValue = 0) { var value = Get(key); return int.TryParse(value, out var result) ? result : defaultValue; } public static bool GetBool(string key, bool defaultValue = false) { var value = Get(key); return bool.TryParse(value, out var result) ? result : defaultValue; } // 🔹 型付き設定(オーバーロード) public static void Set(string key, int value) => Set(key, value.ToString()); public static void Set(string key, bool value) => Set(key, value.ToString()); // 🔔 設定変更通知(任意) public static event Action<string, string>? SettingChanged; // 🔹 補助プロパティ public static IEnumerable<string> Keys => DefaultSettings.Keys; public static IReadOnlyDictionary<string, string> AllDefaults => DefaultSettings; }
こんな感じでラッパークラスを追加すればってCopilotの提案を素直に受け入れて進めてみてます。
0 件のコメント:
コメントを投稿