Uno de los principales ejemplos que se utilizan para explicar el poder de extensiones reactivas (Rx) es la combinación de eventos de ratón existentes en un nuevo 'evento' que representa deltas durante arrastre del ratón:Extensiones reactivas (Rx) + MVVM =?
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;
Fuente: Matthew Podwysocki's Introduction to the Reactive Framework series.
En MVVM por lo general se esfuerzan por mantener mis .xaml.cs presentar lo más vacío posible y una manera de conectar los eventos de la vista con comandos en el modelo de vista puramente en el marcado es el uso de un comportamiento:
<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>
Fuente: Brian Genisio.
El marco reactivo parece estar más orientado hacia el patrón MVC tradicional donde un controlador conoce la vista y puede hacer referencia a sus eventos directamente.
Pero, ¡quiero tener mi pastel y comerlo!
¿Cómo combinaría estos dos patrones?
Plataforma? Silverlight? – AnthonyWJones
Anthony: ¿Importa? –