WPF Caliburn.Micro使用步骤

栏目总目录


使用步骤

  1. Bootstrapper类必要配置
public class Bootstrapper : BootstrapperBase
{
    //容器可以更换,只是个IOC容器用来注册服务
    private readonly SimpleContainer _container = new SimpleContainer();

    public Bootstrapper()
    {
        Initialize();
    }

    protected override void Configure()
    {
        //实例化容器
        _container.Instance(_container);
        //注册服务
        _container
          .Singleton<IWindowManager, WindowManager>()
          .Singleton<IEventAggregator, EventAggregator>();
        //注册ViewModel类
        foreach (var assembly in SelectAssemblies())
        {
            assembly.GetTypes()
           .Where(type => type.IsClass)
           .Where(type => type.Name.EndsWith("ViewModel"))
           .ToList()
           .ForEach(viewModelType => _container.RegisterPerRequest(
               viewModelType, viewModelType.ToString(), viewModelType));
        }
    }
    //配置开始界面
    protected override async void OnStartup(object sender, StartupEventArgs e)
    {
        //这三种都可以
        //await DisplayRootViewForAsync(IoC.Get<ShellViewModel>().GetType());
        //await DisplayRootViewForAsync(typeof(ShellViewModel));
        await DisplayRootViewFor<ShellViewModel>();
    }
    //解析IOC容器里的某个实例,通过依赖注入容器来创建一个新实例(如果它还不存在)或返回已经存在的实例(如果它已经被解析过并被容器管理)
    protected override object GetInstance(Type service, string key)
    {
        return _container.GetInstance(service, key);
    }
    //获取IOC容器里的所有实例,从某个集合或存储中检索已存在的实例。在DI容器的上下文中,它可能意味着从容器中检索一个已经存在的实例
    protected override IEnumerable<object> GetAllInstances(Type service)
    {
        return _container.GetAllInstances(service);
    }
    //找对应视图
    protected override void BuildUp(object instance)
    {
        _container.BuildUp(instance);
    }
}
  1. App配置
//前台配置或者后台配置,二选一
<Application x:Class="Caliburn.Micro.Tutorial.Wpf.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Caliburn.Micro.Tutorial.Wpf">
	<Application.Resources>
		<ResourceDictionary>
		<ResourceDictionary.MergedDictionaries>
			<ResourceDictionary>
				<local:Bootstrapper x:Key="Bootstrapper" />
			</ResourceDictionary>
		</ResourceDictionary.MergedDictionaries>
		</ResourceDictionary>
	</Application.Resources>
</Application>

public partial class App : Application
  {
      Bootstrapper _bootstrapper; 
      public App()
      {
          _bootstrapper = new Bootstrapper();
      }
  }
}
  1. 新建Views类和ViewModels文件夹

CM绑定

<!--原生命令-->
<Button Content="Button Command" Command="{Binding ButtonCommand}"/>
<!--CM绑定名称-->
<Button Content="Button Click Name" Name="ButtonClickName"/>
<!--CM附加属性-->
<Button Content="Button Click Attached Property" cal:Message.Attach="ButtonClickAttachedProperty"/>
<!--CM任意关联-->
<Button Content="Button Click Any ">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <cal:ActionMessageAction MethodName="ButtonClickAnyBehavior"/>
        </i:EventTrigger>
</Button>
<Button Content="Button Click Any" cal:Message.Attach="[Event MouseDoubleClick]=[ButtonClickAny]}"/>

<!--CM有参-->
<Button Content="Button Click " cal:Message.Attach="ButtonClick(object)"/>

<!--CM传属性名称-->
<Button Content="Button Click Property" cal:Message.Attach="ButtonClickProperty(Property)"/>

Caliburn.Micro是一个用于构建WPF、Xamarin.Forms等应用程序的轻量级框架,它采用了MVVM(Model-View-ViewModel)设计模式。在Caliburn.Micro中,Screen和Conductor是两个核心概念,它们各自具有特定的作用和使用方式,并在应用程序中相互关联。

Screen

  1. 作用

    • Screen是视图模型的基类,提供了生命周期管理和一些辅助功能。
    • 通过继承Screen类,视图模型可以自动获得生命周期事件的支持,这些事件可以用于管理资源、更新UI或执行其他操作。
  2. 使用

    • 视图模型可以通过继承Screen类来使用其提供的功能。
    • Screen类定义了多个生命周期管理的方法,如OnActivate和OnDeactivate,用于管理视图模型的激活和停用状态。
    • 通过实现INotifyPropertyChanged接口,Screen类还支持属性更改通知,以便UI能够自动更新。
  3. 关键特性

    • Activated、DeActivated等事件,允许执行自定义的激活和停用逻辑。
    • GetView方法可以用于获取与Screen关联的View对象。

Conductor

  1. 作用

    • Conductor用于管理Screen对象,是Screen对象之间的导航和交互的中心。
    • 不同的Screen对象可以通过一个Conductor来管理,实现复杂的导航和交互逻辑。
  2. 使用

    • 通过继承Conductor类或其派生类(如Conductor.Collection.OneActive等),视图模型可以获得管理Screen对象的能力。
    • Conductor类提供了ActivateItemAsync等方法,用于激活、停用和导航不同的Screen对象。
  3. 关键特性

    • Conductor本身也是一个Screen对象,因为它继承了Screen类,因此也具有Screen的生命周期管理功能。
    • Conductor使用了策略模式,允许根据应用程序的需求更改对Screen对象的处理方式。

关联

  • Screen与Conductor的关联

    • Screen对象通过Conductor对象进行管理,实现了视图模型间的导航和交互。
    • Conductor可以激活、停用和导航多个Screen对象,从而控制应用程序的UI流程和用户体验。
  • 生命周期管理

    • Screen的生命周期由Conductor控制,当Conductor激活一个Screen时,该Screen的OnActivate方法将被调用;当Screen被停用时,其OnDeactivate方法将被调用。
  • UI更新

    • Screen对象通过实现INotifyPropertyChanged接口来通知UI进行更新。当Screen的属性发生变化时,Conductor可以监听这些变化并相应地更新UI。

总结来说,Caliburn.Micro中的Screen和Conductor是相互关联的两个核心概念。Screen提供了视图模型的生命周期管理和辅助功能,而Conductor则用于管理Screen对象并实现视图模型间的导航和交互。它们共同构成了Caliburn.Micro框架中视图模型管理的基础。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

語衣

感谢大哥

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值