日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C#?CM框架實現多頁面管理的實例代碼_C#教程

作者:zls366 ? 更新時間: 2022-05-16 編程語言

概述

之前我分享過一個wpf的項目實踐,主頁面左側是個listbox,每次選擇改變后呈現對應的頁面,界面圖如下

要實現這樣一個功能,我之前是采用傳統方式實現的,本節我采用CM框架下的Conductor去實現,這樣代碼量可以大幅度壓縮,核心代碼就一行。

傳統方式

后臺代碼:①定義集合并添加數據:

public IViewModel ActiveWindowView { get; set; }
       public ObservableCollection ListBoxItems { get; set; }
       public string SelectedItem { get; set; }
ListBoxItems = new ObservableCollection() { };
           ListBoxItems.Add("ShellView");
           ListBoxItems.Add("EventAggregatorView");
           ListBoxItems.Add("ConductorView");
           ListBoxItems.Add("MatchTemplateView");
           ListBoxItems.Add("IndicatorLightView");
           ListBoxItems.Add("MemorandumView");
           ListBoxItems.Add("FTPTestView");

  ②listbox選擇改變后切換頁面:

public void ListBoxItems_SelectionChanged()
       {
          switch(SelectedItem)
           {
               case "ShellView":
                   ActiveWindowView = new ShellViewModel();break;
               case "EventAggregatorView":
                       ActiveWindowView = EventAggregatorViewModel.Instance; break;
               case "ConductorView":
                   ActiveWindowView = new ConductorViewModel(); break;
               case "MatchTemplateView":
                   ActiveWindowView = new MatchTemplateViewModel(); break;
               case "IndicatorLightView":
                   ActiveWindowView = new IndicatorLightViewModel(); break;
               case "MemorandumView":
                   ActiveWindowView = IoC.Get(); break;
               case "FTPTestView":
                   ActiveWindowView = new FTPTestViewModel(new FTPConfig()); break;
               default:break;
           }
       }

  ③前臺綁定:


            

利用CM框架下Conductor實現

① 后臺代碼:首先是需要繼承Conductor.Collection.OneActive這樣才能使用這個類下面的方法和屬性,其次是構造函數需要添加接收的接口IEnumerable,這樣改造完代碼如下:

public MainWindowViewModel(IEnumerable modules)
      {
          Items.AddRange(modules);
          ActivateItem(Items.FirstOrDefault(vm => vm.GetType() ==typeof(IndicatorLightViewModel)));
      }

  如果不考慮首次激活的頁面那核心代碼就只有一句:

Items.AddRange(modules);

②前臺代碼:


 

這樣前后臺就設置完事了,繼承了一個框架的多屏幕管理類,使得前后臺代碼大幅度精簡,功能上也沒打折扣,準確說是更強大了,這就是CM框架的優勢所在。

原文鏈接:https://www.cnblogs.com/zls366/archive/2022/03/12/15997282.html

欄目分類
最近更新