概述
- 之前我分享過一個wpf的專案實踐,主頁面左側是個listbox,每次選擇改變后呈現對應的頁面,界面圖如下
要實作這樣一個功能,我之前是采用傳統方式實作的,本節我采用CM框架下的Conductor<T>去實作,這樣代碼量可以大幅度壓縮,核心代碼就一行,
傳統方式
后臺代碼:①定義集合并添加資料:
public IViewModel ActiveWindowView { get; set; }
public ObservableCollection<string> ListBoxItems { get; set; }
public string SelectedItem { get; set; }
ListBoxItems = new ObservableCollection<string>() { };
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<MemorandumViewModel>(); break;
case "FTPTestView":
ActiveWindowView = new FTPTestViewModel(new FTPConfig()); break;
default:break;
}
}
③前臺系結:
<ListBox Name="ListBoxItems" Grid.Column="0" SelectedItem="{Binding SelectedItem}" Margin="2"
cal:Message.Attach="[Event SelectionChanged] = [Action ListBoxItems_SelectionChanged]"/>
?
<ContentControl Name="ActiveWindowView"/>
利用CM框架下Conductor<T>實作
① 后臺代碼:首先是需要繼承Conductor<IViewModel>.Collection.OneActive這樣才能使用這個類下面的方法和屬性,其次是建構式需要添加接收的介面IEnumerable<T>,這樣改造完代碼如下:
public MainWindowViewModel(IEnumerable<IViewModel> modules)
{
Items.AddRange(modules);
ActivateItem(Items.FirstOrDefault(vm => vm.GetType() ==typeof(IndicatorLightViewModel)));
}
如果不考慮首次激活的頁面那核心代碼就只有一句:
Items.AddRange(modules);
②前臺代碼:
<ListBox Name="Items" Grid.Column="0" Margin="2" DisplayMemberPath="DisplayName"/> <ContentControl Name="ActiveItem"/>
這樣前后臺就設定完事了,繼承了一個框架的多螢屏管理類,使得前后臺代碼大幅度精簡,功能上也沒打折扣,準確說是更強大了,這就是CM框架的優勢所在,
原始碼提取
百度網盤鏈接:https://pan.baidu.com/s/1Qvi2LKHX_OpjDvvvcrijgw
提取碼:
獲取方式1:添加小編微信mm1552923,備注:管理;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/441889.html
標籤:.NET技术
上一篇:C# CM框架下打造符合MVVM思想的WPF登錄表單
下一篇:WEB端播放華為海康大華視頻方案
