SettingViewModel.Database.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. using TeamAAS.Database.Services;
  3. using TeamAAS.Database.UI;
  4. using TeamAAS.FlowEditor;
  5. namespace TeamAAS.ViewModels
  6. {
  7. /// <summary>
  8. /// 设置页 - 产品数据管理(数据库):在设置页宿主 TeamAAS.Database 的配置页,
  9. /// 绑定「当前主程序打开的产品」——每个产品一个库,页面即该产品的数据库配置/调试页。
  10. /// 页面本身由 DatabaseConfigPageFactory 按数据库提供者类型动态创建(可被提供者专属页替换)。
  11. /// </summary>
  12. public partial class SettingViewModel
  13. {
  14. private object _currentProductDatabasePage;
  15. /// <summary>右侧容器内容:按当前产品的数据库提供者类型,用工厂创建配置/调试页。</summary>
  16. public object CurrentProductDatabasePage
  17. {
  18. get { return _currentProductDatabasePage; }
  19. private set { SetProperty(ref _currentProductDatabasePage, value); }
  20. }
  21. private string _dbProductName = "";
  22. /// <summary>当前数据库配置页绑定的产品名(跟随主程序当前打开的产品)。</summary>
  23. public string DbProductName
  24. {
  25. get { return _dbProductName; }
  26. private set { SetProperty(ref _dbProductName, value); }
  27. }
  28. /// <summary>
  29. /// 按「当前打开的产品」刷新数据库配置页(进入本页 / 切换产品时调用)。
  30. /// 只有当前打开的产品才有可修改的数据库页,符合“跟着产品走”。
  31. /// </summary>
  32. private void RefreshDatabaseHost()
  33. {
  34. // 旧页解绑
  35. (_currentProductDatabasePage as IDatabaseConfigPage)?.UnbindDatabase();
  36. CurrentProductDatabasePage = null;
  37. var product = ProductManager.Instance.CurrentProductName;
  38. DbProductName = string.IsNullOrEmpty(product) ? "(未打开产品)" : product;
  39. if (string.IsNullOrEmpty(product)) return;
  40. try
  41. {
  42. var db = ProductDatabaseManager.GetOrCreate(product);
  43. CurrentProductDatabasePage = DatabaseConfigPageFactory.Create(db);
  44. }
  45. catch (Exception ex)
  46. {
  47. System.Diagnostics.Debug.WriteLine($"加载产品数据库配置页失败: {ex.Message}");
  48. }
  49. }
  50. }
  51. }