首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用Caliburn.micro EventAggregator MVVM在ViewModels之间传递值

Caliburn.Micro是一个轻量级的MVVM框架,而EventAggregator是其提供的一种机制,用于在ViewModels之间传递值。下面是使用Caliburn.Micro EventAggregator MVVM在ViewModels之间传递值的步骤:

  1. 首先,确保你的项目中已经引入了Caliburn.Micro框架。
  2. 创建一个事件类,用于定义需要传递的值。这个事件类需要继承自Caliburn.Micro的PropertyChangedBase类,并且定义一个属性来存储传递的值。例如:
代码语言:txt
复制
public class MyEvent : PropertyChangedBase
{
    private string _value;
    public string Value
    {
        get { return _value; }
        set
        {
            _value = value;
            NotifyOfPropertyChange(() => Value);
        }
    }
}
  1. 在发送方的ViewModel中,创建一个EventAggregator实例,并使用Publish方法发送事件。例如:
代码语言:txt
复制
public class SenderViewModel : Screen
{
    private readonly IEventAggregator _eventAggregator;

    public SenderViewModel(IEventAggregator eventAggregator)
    {
        _eventAggregator = eventAggregator;
    }

    public void SendMessage()
    {
        var myEvent = new MyEvent { Value = "Hello World" };
        _eventAggregator.PublishOnUIThread(myEvent);
    }
}
  1. 在接收方的ViewModel中,订阅事件并处理传递的值。例如:
代码语言:txt
复制
public class ReceiverViewModel : Screen, IHandle<MyEvent>
{
    private readonly IEventAggregator _eventAggregator;

    public ReceiverViewModel(IEventAggregator eventAggregator)
    {
        _eventAggregator = eventAggregator;
        _eventAggregator.Subscribe(this);
    }

    public void Handle(MyEvent message)
    {
        // 处理传递的值
        string value = message.Value;
        // ...
    }
}
  1. 最后,在App.xaml.cs文件中初始化EventAggregator实例,并将其注入到需要使用的ViewModel中。例如:
代码语言:txt
复制
public partial class App : Application
{
    private readonly IEventAggregator _eventAggregator = new EventAggregator();

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        var container = new SimpleContainer();
        container.Singleton<IWindowManager, WindowManager>();
        container.Singleton<IEventAggregator>(_eventAggregator);
        // 注册其他需要的服务

        var bootstrapper = new Bootstrapper(container);
        bootstrapper.Initialize();
    }
}

通过以上步骤,你就可以在ViewModels之间使用Caliburn.Micro EventAggregator进行值的传递了。请注意,这里的示例仅为演示目的,实际使用时需要根据项目的具体情况进行适当的调整。

关于Caliburn.Micro的更多信息和使用方法,你可以参考腾讯云的文档:Caliburn.Micro

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【愚公系列】2023年02月 .NET CORE工具案例-Caliburn.Micro使用基于WPF的改造的MVVM案例

文章目录 前言 1.Caliburn.Micro是什么 2.Caliburn.Micro的主要功能 一、Caliburn.Micro使用基于WPF的改造 1.项目介绍 2.安装软件包 3.改造App...是一个微软开发的用于构建WPF,Silverlight和Windows Phone应用程序的MVVM(模型-视图-视图模型)框架。...2.Caliburn.Micro的主要功能 Caliburn.Micro是一个小型MVVM框架,主要提供了以下功能: 简化MVVM模式的实施 视图绑定 统一方式的消息机制 基于事件和命令的行为触发 支持视图导航...Caliburn.Micro 官网:https://caliburnmicro.com/ 一、Caliburn.Micro使用基于WPF的改造 1.项目介绍 HelloWorld:框架的搭建...、容器注入相关 HelloWorld.Core;放置数据模型,即mvvm中的M HelloWorld.ViewModels:模型视图,即VM HelloWorld.Views:V,即视图 本项目是基于.

97420

C# WPF MVVM开发框架Caliburn.Micro入门介绍①

MVVM中的View ModelModel和View之间扮演着转换器的角色,把Model的数据交给View去绑定,把View的数据提交给Model;同时也要实现mediator设计模式,成为View...和Model之间的逻辑协调者。...参数可以数据绑定到其他框架元素,也可以传递特殊,例如DataContext或EventArgs。所有参数都会自动转换为方法的签名。...如果您更喜欢使用监控控制器和被动查看而不是MVVM,请继续。你会发现Caliburn.Micro可以帮助你很多,特别是它的Screen/ScreenConductor实现。...您可以开始使用Caliburn.Micro进行开发,然后,如果您遇到边缘情况或有其他需要转移到Caliburn,您将能够应用程序中进行少量更改或不进行任何更改。

1.7K20

C# WPF MVVM模式Prism框架下事件发布与订阅

01 前言 处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Prism提供了一种事件机制,可以应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事件进行通讯...,且彼此之间没有引用,这就实现了模块之间低耦合的通信方式。...WPF MVVM项目实战(进阶①) C# WPF MVVM项目实战(进阶②) C# WPF框架Caliburn.Micro快速搭建 C# WPF项目实战 C# WPF mvvm模式下combobox绑定...(list、Dictionary) C# WPF MVVM模式下在主窗体显示子窗体并获取结果 C# WPF Caliburn.Micro框架下利用Mef加载其它项目界面...C# 无意间写了一段线程死锁的代码 C# 看懂这100+行代码,你就真正入门了(经典) C# WPF项目实战(经典) WPF 如何修改button圆角(经典) WPF XAML 为项目设置全局样式

2.9K20

C# WPF MVVM模式Caliburn.Micro框架下事件发布与订阅

01 前言 处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Caliburn提供了一种事件机制,可以应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事件进行通讯...,且彼此之间没有引用,这就实现了模块之间低耦合的通信方式。...WPF MVVM项目实战(进阶①) C# WPF MVVM项目实战(进阶②) C# WPF框架Caliburn.Micro快速搭建 C# WPF项目实战 C# WPF mvvm模式下combobox绑定...(list、Dictionary) C# WPF MVVM模式下在主窗体显示子窗体并获取结果 C# WPF Caliburn.Micro框架下利用Mef加载其它项目界面...C# 无意间写了一段线程死锁的代码 C# 看懂这100+行代码,你就真正入门了(经典) C# WPF项目实战(经典) WPF 如何修改button圆角(经典) WPF XAML 为项目设置全局样式

1.8K10

Caliburn.Micro学习笔记(四)----IHandle实现多语言功能

说一下IHandle实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双向的所以我们想动态的实现多语言切换很是方便今天我做一个小...源码的下载地址文章的最下边 多语言用的是资源文件建一个MyLanguage的资源文件再添加一个MyLanguage.en-US的资源文件如果你还想要 其它的语言可自己添加。...两个资源文件里写上你要的文本如下图这样,它们的名称是一样的只是一个是中文一个是英文 ?  ...下面我们就要开始用Caliburn.Micro的IHandle去实现多语言了 先写一个资源的接口 public interface IResource { string...这样每一个控件都会初始化一个MyResourceExtension类都会去订阅IHandle广播 再看一下viewModel namespace WPFMultLanguage.ViewModels

80670

从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 这段时间一直使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了。...Caliburn.Micro是一个轻量级的WPF框架,简化了WPF中的不少用法,推荐做WPF开发时优先使用。...比如本文将介绍如何使用Caliburn.Micro v3.2开发出一个简单的计算器,里面用到了C#中的async异步技术,Caliburn.Micro中的Conductor等等~ Step 1: VS...Step 2: 使用NuGet包管理工具为当前项目安装Caliburn.Micro 对于Caliburn.Micro 1.x和2.x版,只能使用.dll,需手动给项目加Reference。...项目目录下新建Models, ViewModels, Views这3个文件夹 ViewModel文件夹中添加ShellViewModel.cs,并创建Left, Right和Result这3个属性

1.2K20

WPF框架教程 | 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

之前时间一直使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了。...比如本文将介绍如何使用Caliburn.Micro v3.2开发出一个简单的计算器,里面用到了C#中的async异步技术,Caliburn.Micro中的Conductor等等~ >>>1.VS中创建...WPF项目<<< >>>2.使用NuGet包管理工具为当前项目安装Caliburn.Micro <<< 对于Caliburn.Micro 1.x和2.x版,只能使用.dll,需手动给项目加Reference...项目目录下新建Models, ViewModels, Views这3个文件夹 ViewModel文件夹中添加ShellViewModel.cs,并创建Left, Right和Result这3个属性。...NotifyOfPropertyChange(); } } } 说明: 最开始布局xaml时,设计位置时采用的是左(operand 1), 中(operand 2), 右(result),于是属性使用

4.2K10

C# WPF MVVM开发框架Caliburn.Micro自定义引导程序④

让我们首先将应用程序配置为使用IoC容器。本例中我们将使用内置容器,但是Caliburn.Micro可以很好地处理任何容器。首先,继续学习第1部分的代码。我们将以此为出发点。...配置完容器后,我们需要告诉Caliburn.Micro如何使用它。这就是后面三个覆盖的目的。框架需要“GetInstance”和“getAllInstance”。...02 给智者的话 虽然Caliburn.Micro确实通过引导程序的覆盖和IoC类提供ServiceLocator功能,但您应该避免应用程序代码中直接使用它。...和WinForms应用程序中使用Caliburn.Micro 可以从非Xaml主机使用Caliburn.Micro。...继承时,应将“false”传递给基构造函数的“useApplication”参数。这允许引导程序不存在Xaml应用程序实例的情况下正确配置Caliburn.Micro

90310

使用 Architecture Component 实现 MVVM 的正确姿势

思考一下如果用常规的做法如何实现:加 Callback?还是使用 EventBus?...: // 懒加载,只有使用的时候才初始化,但是还是要保证 Activity.onCreate() 或者 // Fragment.onAttach() 之后再使用 private val viewModel...粘性消息特性以及适用场景 LiveData 默认是支持粘性消息的,也就是 observe() 的时候可以拿到 observe() 之前赋给 LiveData 的。...image.png 上图中的例子,我们把从 Repo 传递过来的 DataLayerModel ViewModel 处转换成了 UiModel 再提供给 View,这是一种很常见的模式,有时候...() 方法中取消监听/释放资源 各层之间的通信方式 使用 Transforms 让 ViewModel 和 Model 之间也用上 LiveData image.png 使用 LiveData 的方式要注意

75920

C# WPF MVVM开发框架Caliburn.Micro 名称Transformer⑩①

使用名称Transformer NameTransformer是Caliburn.Micro v1.1中引入的,它是ViewLocator和ViewModelLocator如何将类名映射到其伙伴角色的一个组成部分...可选择的 为了说明如何使用此方法,我们可以查看ViewLocator类添加的一个内置规则: NameTransformer.AddRule("Model$", string.Empty); 此转换规则查找终止...您永远不会像上面的例子那样构造replace,因为它会产生非法的类型名。它只是一个replace,它将回显所有捕获组以供演示。 您可能会注意到,捕获组并不是相互排斥的。...如果需要“交换”任何一个单独的组件,则可以使用单独的组件。 上面示例中的捕获组“后缀”对以“ViewModels”结尾的名称进行模式匹配。...使用此捕获组的主要原因是防止子字符串“ViewModels“basename”组中被捕获,大多数情况下,这是字符串转换的一部分。

1.8K20

C# WPF MVVM开发框架Caliburn.Micro 自定义Conventions⑩

术语 介绍定位器类的这些新方法之前,最好先讨论一下术语。 名称转换是一个通用术语,用于描述如何进行类型解析。类型的完全限定名作为源,然后“转换”为输出类型的名称。...(可选) 此方法支持nsSource参数中使用通配符(用*)。...(可选) 此方法支持nsSource参数中使用通配符(用*)。...当nsSource参数使用空字符串(或string.Empty)时,作为nsTarget/nsTargets参数传递的命名空间将追加到源类型的命名空间。...如果不需要“视图”和“ViewModels”子名称空间之间的默认映射,则可以使用适当的配置设置来消除直接调用AddSubNamespaceMapping()的需要。

65320

C# WPF MVVM开发框架Caliburn.Micro Screens, Conductors 和 Composition⑦

虽然这些模式主要通过从特定基类继承ViewModelsCM中使用,但将它们视为角色而不是视图模型是很重要的。事实上,根据您的体系结构,屏幕可以是用户控件、演示者或视图模型。不过这有点超前了。...像VS这样的MDI风格的应用程序中,导体将管理ScreenCollection成员之间切换活动屏幕。打开一个新文档会将其添加到屏幕集合并切换到活动屏幕。...Caliburn.Micro实现 这些概念通过各种接口和基类CM中实现,这些接口和基类主要用于构建ViewModels。...在这两种情况下,将调用CanClose逻辑,如果允许,将使用true调用OnDeactivate。...之前,我们Caliburn.Micro中讨论了屏幕和导体的理论和基本API。现在,我将介绍几个示例中的第一个。此特定示例演示如何使用导体和两个“页面”视图模型设置一个简单的导航样式shell。

2.5K20

LiveData 的正确使用姿势以及反模式

借助 LiveData 的能力, View(Activity 或者 Fragment)和 ViewModel 之间使用 LiveData 通信,当 LiveData 发生变化的时候,订阅了该 LiveData...然而,这里有个细节需要注意:View observes LiveData 的那一刻,便能收到一次通知,拿到当前 LiveData 的。...换句话说,我们可以监听 LiveData 的时候,拿到监听之前设置给 LiveData 的 —— 我们称之为粘性消息。 但是有时候,我们并不希望监听的时候拿到「上一次的」。...如何理解状态(state)和事件(event)?...case 4:错误使用 LifecycleOwner 一种很常见的场景: RecycleView 的 ViewHolder 中监听 ViewModel 的 LiveData,然后此时传递的 lifecycleOwner

84020

C# WPF MVVM开发框架Caliburn.Micro 关于Conventions⑧

如果您要使用约定,并且由于它们默认情况下处于启用状态,那么最好了解这些约定是什么以及它们是如何工作的。这就是本文的主题。...现在,回到“上下文”。这就是CM如何支持同一ViewModel上的多个视图。如果提供了上下文(通常是字符串或枚举),我们将根据该对名称进行进一步转换。...在这里,您的根ViewModel被传递给定位器,以确定应用程序的shell应该如何呈现。Silverlight中,这将导致设置或您的RootVisual。WPF中,这将创建主窗口。...事实上,WPF中,引导程序将此委托给WindowManager,这使我想到……ViewLocator使用的第二个位置是WindowManager,它调用它来确定任何对话框ViewModels如何呈现...但是,了解这些约定是什么以及整个框架中如何使用它们是很重要的。本文的最底部是一个代码列表,它显示了如何开箱即用地配置所有元素。

2.7K20

ViewModels and LiveData- Patterns + AntiPatterns

ViewModel不知道的情况下,Activity和Fragment可以被销毁并再次创建。 img 将视图(Activity或Fragment)的引用传递给ViewModel是一个严重的风险。...❌ 避免ViewModels中对View进行引用。 ViewModels和View之间进行通信的推荐方式是观察者模式,使用LiveData或来自其他库的观察变量方式。...Leaking ViewModels 反应式范式Android中运行良好,因为它允许UI和你的应用程序的其他层之间建立一个方便的连接。...ViewModels如何与其他组件通信由你决定,但要注意泄漏和边缘情况。考虑一下这个图,视图层使用观察者模式,数据层使用回调。...使用LiveData存储库和ViewModel之间进行通信,其方式类似于View和ViewModel之间使用LiveData。 这点用Flow也可以解决。

1.1K30

当我们使用 MVVM 模式时,我们究竟在每一层里做些什么?

当我们使用 MVVM 模式时,我们究竟在每一层里做些什么?...我只是想说说我们究竟应该如何理解 M-V-VM,当我们真正开始写代码时,应该在里面的每一层里写些什么。 ---- MVVM,当然三层——M-V-VM。...MVVM 只是数据驱动型 GUI 程序建议的开发模式;无论是三层中的哪一层,本质上都是解决 UI 问题。 而非 UI 问题根本就不在 MVVM 的讨论之列。...定义这些数据模型是为了与其他组件、其他程序、其他设备传递数据,并将这些数据为视图模型所用。那些不驱动 UI 的数据根本不在此谈论之列。...ViewModel View 通知 ViewModel 推荐用数据绑定 尽量不要直接调用 ViewModel,但必要的时候也可以去调用 ViewModel 通知 View 属性绑定 事件通知 消息(比如 EventAggregator

87010
领券