代码之家  ›  专栏  ›  技术社区  ›  Francisco Noriega

101个RX示例

  •  37
  • Francisco Noriega  · 技术社区  · 15 年前

    编辑:谢谢你链接到wiki,我想既然wiki已经在那里启动了,那么去那里查看它就更容易了。不过,这里的问题也很好,因此不在msdn论坛周围的人可以了解wiki及其所在位置。

    简短的问题:

    你有没有一个可以帮助人们更好地理解它的RX代码样本?

    长时间漫无目的地问隐藏的问题:

    现在, RX框架 已经发布了,我想我们中的许多人都有兴趣获取并尝试它们。遗憾的是,实际上没有太多的例子(经过彻底的搜索,我几乎确信RX只不过是为了简单地拖拽WPF应用程序)。

    我不清楚我在哪里读到或听到(我看过很多博客和视频),RX团队似乎有兴趣做101系列……当他们有足够的时间做的时候……这对于那些想理解它并开始玩它的人来说是非常糟糕的(我的意思是,当一项新技术出现时,那些自尊心的开发人员不会觉得自己像个带着新玩具的孩子。

    我个人一直在尝试,但哇哦,其中有一些疯狂的概念…只是要有方法名,比如 物化 拉链 让我想起 传送点 以及来自 回到未来 .

    所以,我认为,如果那些有更大理解力的人,帮助建立一个例子集,ALA,那就更好了。 101个LINQ示例 从基本用法到更复杂的东西,实际上几乎涵盖了所有的方法和它们的使用(也许也有一些理论,特别是因为这些概念可能需要它)。

    我认为Devs女士花时间给我们这样的材料是很好的,但我也认为这个社区足够好,可以开始建立我们自己的材料,不是吗?

    7 回复  |  直到 7 年前
        1
  •  27
  •   Robert Hencke    15 年前

    几天前我也有类似的想法。我们在RX的msdn论坛上发布了自己的“101个RX样本”,但后来我们将其改为wiki格式。请随时过来添加您自己的样品!

    101 Rx Samples on the Rx wiki

        2
  •  12
  •   Community basarat    7 年前

    首先-这里是一个简单的绘图应用程序,这样当用户拖动时,我们将从初始鼠标向下位置绘制一条红线到当前位置,同时在当前位置绘制一个蓝色点。这是我上周对RX的黑客攻击的结果

    A WPF Drawing Demo

    这是源代码。

    //A draw on drag method to perform the draw
    void DrawOnDrag(Canvas e)
            {
    
                //Get the initial position and dragged points using LINQ to Events
                var mouseDragPoints = from md in e.GetMouseDown()
                                      let startpos=md.EventArgs.GetPosition(e)
                                      from mm in e.GetMouseMove().Until(e.GetMouseUp())
                                      select new
                                      {
                                          StartPos = startpos,
                                          CurrentPos = mm.EventArgs.GetPosition(e),
                                      };
    
    
                //Subscribe and draw a line from start position to current position
                mouseDragPoints.Subscribe
                    (item =>
                    {
                        e.Children.Add(new Line()
                        {
                            Stroke = Brushes.Red,
                            X1 = item.StartPos.X,
                            X2 = item.CurrentPos.X,
                            Y1 = item.StartPos.Y,
                            Y2 = item.CurrentPos.Y
                        });
    
                        var ellipse = new Ellipse()
                        {
                            Stroke = Brushes.Blue,
                            StrokeThickness = 10,
                            Fill = Brushes.Blue
                        };
                        Canvas.SetLeft(ellipse, item.CurrentPos.X);
                        Canvas.SetTop(ellipse, item.CurrentPos.Y);
                        e.Children.Add(ellipse);
                    }
                    );
            }
    

    Read my post with further explanation here Download the source code here

    希望这有帮助

        3
  •  7
  •   avandeursen    12 年前

    另一个有用的资源可能是 Reactive Extensions (Rx) Koans : 55个渐进式示例帮助您学习Rx

        4
  •  5
  •   Luciano    11 年前

    我在读书 http://www.introtorx.com 就像名字所暗示的,这似乎是一个简明的介绍。似乎有很多(非常基本的)例子,一步一步地,主要是使用控制台打印出来的东西。

        5
  •  4
  •   Richard Anthony Hein    14 年前

    这是我的变体 drag & drop sample by Wes Dyer ,对于Windows窗体(我可能会使其启用拖动扩展方法):

        public Form2()
        {
            InitializeComponent();
    
            EnableDragging(pictureBox1);
            EnableDragging(button1);
            EnableDragging(this);
        }
    
        private void EnableDragging(Control c)
        {
            // Long way, but strongly typed.
            var downs = from down in Observable.FromEvent<MouseEventHandler, MouseEventArgs>(
                            eh => new MouseEventHandler(eh), 
                            eh => c.MouseDown += eh,  
                            eh => c.MouseDown -= eh)
                        select new { down.EventArgs.X, down.EventArgs.Y };
    
            // Short way.
            var moves = from move in Observable.FromEvent<MouseEventArgs>(c, "MouseMove")
                        select new { move.EventArgs.X, move.EventArgs.Y };
    
            var ups = Observable.FromEvent<MouseEventArgs>(c, "MouseUp");
    
            var drags = from down in downs
                        from move in moves.TakeUntil(ups)
                        select new Point { X = move.X - down.X, Y = move.Y - down.Y };
    
            drags.Subscribe(drag => c.SetBounds(c.Location.X + drag.X, c.Location.Y + drag.Y, 0, 0, BoundsSpecified.Location));
        }  
    
        6
  •  3
  •   Costin    7 年前

    有点晚了,但是如果有新的人发现这个问题, http://rxmarbles.com/ 提供了一种非常好的可视化操作员的方法。

        7
  •  1
  •   Xiaoguo Ge    7 年前

    还有一个 Stock Viewer Github上的示例 enter image description here

    1. SteamProvider拉取服务器并生成rx.net iobservable流。
    2. SteamAggregator聚合所有IOBServable流,并将结果复制到中央处理线程中。
    3. 视图过滤单个流并将结果复制到它们自己的线程中以供显示。

    所有streamproviders、streamaggregate和视图都在自己的线程中运行。这也是一个典型的实际库存查看应用程序线程模型。

    这个例子也可以是一个简单的WPF数据报性能测试框架。它计算每秒处理的刻度数并将其显示在视图上。