wpf - 将事件控制成命令和 RX

标签 wpf events mvvm system.reactive

我们有一些使用传统事件架构(无命令等)编写的 WPF/Silverlight 控件,并希望将其转换为 MVVM 兼容的控件。我研究了这个主题,我认为我必须编写命令来包装我当前在控件中的事件。我现在想正确设计它,所以我也想使它成为 RX 投诉,而不仅仅是命令。

有人可以向我解释我如何将我当前设计的事件设计成命令和 RX 事件。

如果我们采用控件的 Click 事件之类的东西,并为其设计命令,并且符合 RX(可观察的等),这将很有用,因此我可以理解所涉及的内容。

目前它是简单的事件,使用它很容易理解:)...所以可以订阅它并执行自定义处理程序。
我的雇主希望我执行此命令并对其进行 RX 化。

我阅读了一些关于这些的文章,但发现它需要一些博士学位才​​能理解(数学对偶、Subject 等):) 我无法理解它。
我正在努力将其纳入命令并纳入 RX。请帮忙。我想正确地学习这个,所以我不必再次重新设计它。

提前致谢。

最佳答案

保罗 D,
我认为您可能只是为了技术而强制技术。

首先,您想在 WPF/SL 中使用命令模式,以便您可以编写可测试代码 (MVVM)。这与 Rx 无关。如果您的 ViewModel 构造正确,那么如果您选择在其他地方(存储库、模型、 Controller 等)使用 Rx,那就太好了。

WPF 使用命令而不是事件模式的原因是因为命令告诉某事发生,而事件广播某事确实发生了。当你编写一个 Control 时,你可以广播一个 Click 发生了,但是在你的 ViewModel 中,一个命令反射(reflect)了应该发生的事情。

如果我们看一个例子:

SubmitOrderCommand 可以发起调用以将模型的状态提交到存储库。这本身不需要涉及 Rx。然而,提交的进度可能会利用 Rx 来发布状态变化,例如 Submitting-->Submitted-->CreditChecked-->Accepted。

这可能会导致一些看起来像这样的合约(伪代码)

class OrderEntryViewModel
{
   public ICommand SubmitOrderCommand { get; }
}

interface IOrderRepository
{
   IObservable<OrderStatus> SubmitOrder(SubmitOrderRequest request);
}

我同意你的观点,围绕 Rx 的学术界太多了。我建议你查看我的博客 introduction to Rx .我希望它可以帮助您更快地掌握 Rx。
更新:看看我的书 IntroToRx.com反而。它取代了博客系列。

关于wpf - 将事件控制成命令和 RX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3845087/

相关文章:

android - 如何在来自多个用例/交互器的 View 模型中使用 Kotlin Flows 的组合结果?

c# - 为什么 WPF 在我的案例中不选择正确的 DataTemplate?

c# - WPF:Prism 对小型应用程序来说是否过分杀伤力?

events - JavaFX TextField 如何防止在按键事件中键入键

C# - 接口(interface)/抽象类 - 确保在方法上引发事件

android - Xamarin Forms MasterDetail 页面导航导致 Android 崩溃 [致命信号 6 (SIGABRT),代码 -6],适用于 iOS 和 UWP

c# - 如何在创建用户控件时显示动画

c# - 在组合框中实现 IDataErrorInfo

events - 使异步方法等待Dart事件

c# - 如何将 ListView DataTemplate 中的按钮绑定(bind)到 ViewModel 中的命令? (MVVMLight)