代码之家  ›  专栏  ›  技术社区  ›  TheDeveloper

Xamarin Forms:反应式扩展(Reactive Extensions,Rx)是替代MVVM模式的框架吗?

  •  0
  • TheDeveloper  · 技术社区  · 8 年前

    我有一个关于Xamarin形式的问题。反应式扩展只是现有.net库的扩展吗?所有mvvm框架(FreshMvvm、MvvmCross和MvvmLight)都支持它吗?还是一个新的mvvm框架?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Enigmativity    8 年前

    我无法回答是否所有的MVVM框架都支持Rx,但我可以肯定地说,Rx不是MVVM的替代品,你肯定不会把它称为MVVM框架。

    Rx是一个框架,用于组合被推送的值集合(就像事件一样)。它当然可以在MVVM框架中使用,就像可以使用事件一样。

    下面是一个使用Rx消费事件的小示例:

    void Main()
    {
        var foo = new Foo();
        var bars = Observable.FromEventPattern<int>(h => foo.Bar += h, h => foo.Bar -= h);
        var subsciption = bars.Subscribe(ep => Console.WriteLine(ep.EventArgs));
        foo.OnBar(42);
    }
    
    public class Foo
    {
        public event EventHandler<int> Bar;
        public void OnBar(int i)
        {
            this.Bar?.Invoke(this, i);
        }
    }
    

    这将写入 42 到控制台。

    但我可以这样做:

        var query =
            from b in bars
            where b.EventArgs > 21
            select b.EventArgs * 2;
    
        var subsciption = query.Subscribe(i => Console.WriteLine(i));
    
        foo.OnBar(42);
        foo.OnBar(7);
        foo.OnBar(20);
        foo.OnBar(21);
        foo.OnBar(22);
    

    现在我有一个更复杂的查询,它只写 84 && 44 到控制台。

    这种类型的东西可以用在MVVM框架中,使它们更加强大。

    http://reactiveui.net/ .试试看。