我们有一些使用传统事件架构(无命令等)编写的 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/