wpf – 将事件控制为命令和RX

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

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

如果我们采取类似控件的Click事件,设计命令,以及RX兼容(可观察等),这将是有用的,所以我可以理解所涉及的内容.

目前它是简单的事件,使用起来非常简单:)…所以可以订阅它并执行自定义处理程序.
我的雇主要我制作这个命令,并且还要RX-ify.

我读了一些关于这些的文章,但发现它需要一些博士学位才​​能理解(数学双,主题< T>等):)我无法理解它.
我正在努力把它变成命令并进入RX.请帮忙.我想要正确学习,所以我不必再次重新设计它.

提前致谢.

最佳答案 保罗D,

我认为你可能只是为了技术而强迫技术.

首先,您希望在WPF / SL中使用Command模式,以便您可以编写可测试代码(MVVM).这与Rx无关.如果您正确构造了ViewModel,那么如果您选择在其他地方使用Rx(存储库,模型,控制器等)那么很棒.

WPF使用命令而不是事件模式的原因是因为命令会告诉某事发生,事件广播时会发生某些事情.当你编写一个控件时,你可以广播一个Click,但是在ViewModel中,一个命令反映了应该发生的事情.

如果我们看一个例子:

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

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

class OrderEntryViewModel
{
   public ICommand SubmitOrderCommand { get; }
}

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

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

点赞