建湖做网站的公司,福建省幕墙建设网站要报备吗,做个网站要多少钱,做网站常用代码向右浮动怎么写01—简介之前也写过好多篇CM框架相关的项目实战文章#xff0c;比如#xff1a;C# WPF框架Caliburn.Micro快速搭建C# WPF框架Caliburn.Micro入门实例1C# WPF MVVM项目实战(进阶①)C# WPF MVVM项目实战(进阶②)C# WPF MVVM模式下在主窗体显示子窗体并获取结果C# WPF Caliburn.… 01—简介之前也写过好多篇CM框架相关的项目实战文章比如C# WPF框架Caliburn.Micro快速搭建C# WPF框架Caliburn.Micro入门实例1C# WPF MVVM项目实战(进阶①)C# WPF MVVM项目实战(进阶②)C# WPF MVVM模式下在主窗体显示子窗体并获取结果C# WPF Caliburn.Micro框架下利用Mef加载其它项目界面C# WPF mvvm模式下combobox绑定(listenum、Dictionaryint,string)C# WPF MVVM模式Caliburn.Micro框架下事件发布与订阅但是可能这些都是把一个综合性的项目分多个部分分别讲述的有些初学者没有从前往后连续起来阅读的话后面的部分可能就不容易理解了。其次因为没有整体的构思随着内容的增加项目越来越显得笨重和凌乱所以今天我重新搞了一个项目希望以尽量少的代码涵盖尽量多的知识点帮助大家更好的理解和使用CM框架。02—重要知识点CM框架的配置和启动CM框架自带ioc容器SimpleContainer用法MVVM开发模式事件聚合器EventAggregator进行事件发布和订阅属性通知① CM框架下基类PropertyChangedBase用法②PropertyChanged.Fody.3.1.3下 [AddINotifyPropertyChangedInterface]用法日志框架Common.Logging和log4net用法CM框架下命名约定以及事件关联用第三方库Xceed.Wpf.Toolkit.dll做等待窗体CM框架下Conductor用法CM框架下IWindowManager双检锁单例模式用法 ListBox数据绑定以及窗体切换如果以上知识点你都不敢兴趣或者已经熟知那这篇文章不适合你看到这里你就可以关闭网页了03—运行结果04—项目说明项目主要包括的类文件如下图① MainWindowViewModel.cs类using PropertyChanged;
using System.Collections.ObjectModel;namespace Caliburn.Micro.Hello
{[AddINotifyPropertyChangedInterface]public class MainWindowViewModel : PropertyChangedBase, IViewModel{private static readonly Common.Logging.ILog logger Common.Logging.LogManager.GetLoggerMainWindowViewModel();public IViewModel ActiveWindowView { get; set; }public ObservableCollectionstring ListBoxItems { get; set; } public string SelectedItem { get; set; }public MainWindowViewModel(){logger.Info($Enter [MainWindowViewModel].);ListBoxItems new ObservableCollectionstring() { };ListBoxItems.Add(ShellView);ListBoxItems.Add(EventAggregatorView);ListBoxItems.Add(ConductorView);logger.Info($Leave [MainWindowViewModel].);}public void ListBoxItems_SelectionChanged(){switch(SelectedItem){case ShellView:ActiveWindowView new ShellViewModel();break;case EventAggregatorView:ActiveWindowView EventAggregatorViewModel.Instance; break;case ConductorView:ActiveWindowView new ConductorViewModel(); break;default:break;}}}
} [AddINotifyPropertyChangedInterface]需要引用第三方库PropertyChanged.Fody加上之后类里面的属性变更后会自动通知界面无需再一个个单独触发logger是定义的common logging的一个通用日志需要在nuget上引用Common.Logging.Log4Net1213ListBoxItems_SelectionChanged()是listbox的选择改变事件需要在前台附加事件ListBox NameListBoxItems Grid.Column0 SelectedItem{Binding SelectedItem} Margin2
cal:Message.Attach[Event SelectionChanged] [Action ListBoxItems_SelectionChanged]/ActiveWindowView 是我的主窗体选择那个就激活那个ContentControl NameActiveWindowView/②ShellViewModel.cs类从ioc容器获取一个IWindowManager并显示SimpleContainerViewModel simpleContainerViewModel new SimpleContainerViewModel();IWindowManager windowManager IoC.GetIWindowManager();windowManager.ShowDialog(simpleContainerViewModel);CanSayHello和SayHello只有CanSayHello条件满足才会执行SayHellopublic bool CanSayHello{get { return !string.IsNullOrWhiteSpace(Name); }}public void SayHello(){ }③EventAggregatorViewModel.cs双检锁线程安全的单例模式private static EventAggregatorViewModel instance;private static object locker new object();/// summary/// 双检锁/// /summarypublic static EventAggregatorViewModel Instance{get{if (instance null){lock(locker){if (instance null){instance new EventAggregatorViewModel();}}}return instance;}}事件订阅需要继承事件接口IHandlePersonInfoEvenprivate readonly IEventAggregator eventAggregator;this.eventAggregator IoC.GetIEventAggregator(); this.eventAggregator.Subscribe(this);事件处理方法public void Handle(PersonInfoEven message){PersonInfo message.ToString();}④SimpleContainerViewModel.cs 方法1 同步ui发布事件this.eventAggregator.PublishOnUIThread(i am a chinese); 方法2 开线程去发布 this.eventAggregator.Publish(new PersonInfoEven() {Name ZYR, Age 18, Sex man }, action {//方式①//Task.Factory.StartNew(action);//方式②Task.Run(action);});等待窗体BusyIndicator 需要引用第三方库Xceed.Wpf.Toolkit并添加名称空间xmlns:xctkhttp://schemas.xceed.com/wpf/xaml/toolkitxctk:BusyIndicator NamebusyIndicator BusyContentPublish Event ... IsBusy{Binding IsShow} Style{x:Null}⑤ConductorViewModel.cs此类需要继承Conductorobject将需要激活的实例放到ActivateItem就可以从界面绑定激活对应实例窗体ActivateItem(new ShellViewModel());05—源码下载项目有点长不可能每个细节都说得到位能看到这里的都是真爱那么下面给出源码百度网盘链接网盘链接https://pan.baidu.com/s/18LOVAIxy7WCWJisiPcOuAQ提取码添加小编微信获取小编微信mm1552923公众号dotNet编程大全