gpt4 book ai didi

mvvm - react 性扩展(Rx)+ MVVM =?

转载 作者:行者123 更新时间:2023-12-03 09:19:25 24 4
gpt4 key购买 nike

用于说明Reactive Extensions(Rx)功能的主要示例之一是将现有的鼠标事件组合到一个新的“事件”中,该事件表示鼠标拖动期间的增量:

var mouseMoves = from mm in mainCanvas.GetMouseMove()
let location = mm.EventArgs.GetPosition(mainCanvas)
select new { location.X, location.Y};

var mouseDiffs = mouseMoves
.Skip(1)
.Zip(mouseMoves, (l, r) => new {X1 = l.X, Y1 = l.Y, X2 = r.X, Y2 = r.Y});

var mouseDrag = from _ in mainCanvas.GetMouseLeftButtonDown()
from md in mouseDiffs.Until(
mainCanvas.GetMouseLeftButtonUp())
select md;

资料来源: Matthew Podwysocki's Introduction to the Reactive Framework series

在MVVM中,我通常会努力保持.xaml.cs文件尽可能为空,而纯粹通过标记在viewmodel中使用命令从 View 挂接事件的一种方法是使用行为:
<Button Content="Click Me">
<Behaviors:Events.Commands>
<Behaviors:EventCommandCollection>
<Behaviors:EventCommand CommandName="MouseEnterCommand" EventName="MouseEnter" />
<Behaviors:EventCommand CommandName="MouseLeaveCommand" EventName="MouseLeave" />
<Behaviors:EventCommand CommandName="ClickCommand" EventName="Click" />
</Behaviors:EventCommandCollection>
</Behaviors:Events.Commands>
</Button>

资料来源: Brian Genisio

响应式框架似乎更适合于传统的MVC模式,在该模式中, Controller 知道 View 并可以直接引用其事件。

但是,我想既要吃蛋糕又要吃!

您将如何结合这两种模式?

最佳答案

我编写了一个框架,代表我对这个问题的探索,称为ReactiveUI

它既实现了Observable ICommand,又实现了通过IObservable发出更改信号的ViewModel对象,还实现了将IObservable“分配”给属性的功能,该属性随后会在IObservable发生更改时触发INotifyPropertyChange。它还封装了许多常见的模式,例如让ICommand在后台运行Task,然后将结果编码回UI。

我现在的文档绝对为零,但是在接下来的几天里,我将努力添加这些信息,以及我编写的示例应用程序

更新:我现在有很多文档,请查阅http://www.reactiveui.net

关于mvvm - react 性扩展(Rx)+ MVVM =?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1763411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com