我们使用传统的事件架构(没有命令等)编写了一些
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.它取代了博客系列.