38

編集: wiki へのリンクをありがとうございます。既に開始されているので、そこに行って確認する方が簡単だと思います。ただし、ここでの質問も良いので、msdn フォーラムに参加していない人でも wiki とその場所について知ることができます。

短い質問:

人々がそれをよりよく理解するのに役立つ Rx コードのサンプルはありますか?

隠された質問で長いとりとめのない:

Rx フレームワークがリリースされた今、私たちの多くはビットを入手して試してみることに興味を持っていると思います。悲しいことに、実際には多くの例がありません (徹底的な検索の後、Rx は wpf アプリで簡単にドラッグするためだけのものであるとほぼ確信しています)。

Rx チームが 101 シリーズの作成に関心を持っているように見えることをどこで読んだり聞いたりしたか (私は多くのブログやビデオを見てきました) を正確に思い出すことはできません。 ...それを理解し、今すぐプレイしたい人にとっては、かなりひどいものです (つまり、自尊心のある開発者は、このような新しい技術が登場したときに、新しいおもちゃを持った子供のようには感じません) .

私は個人的に今試してみましたが、すごい概念がいくつかあります.MaterializeZipのようなメソッド名があるだけで、バック・トゥ・ザ・フューチャーテレポーターなどを思い浮かべます.

したがって、より理解のある人たちが、基本的な使用法からより複雑なものまで、すべてのメソッドとその使用法をほぼカバーするala 101 Linq Examplesの例のコレクションを作成するのを手伝ってくれたらいいと思います。実用的な方法 (おそらく少しの理論も必要です。特に、これらの種類の概念にはおそらくそれが必要だったからです)

MS の開発者が時間を割いて私たちにそのような資料を提供してくれるのは素晴らしいことだと思いますが、このコミュニティは私たち自身の資料を作成するのに十分だと思いますよね?

4

6 に答える 6

13

まず、単純な描画アプリケーションを次に示します。ユーザーがドラッグすると、最初のマウス ダウン位置から現在の位置まで赤い線が描画され、現在の位置に青い点が描画されます。これは私の先週の Rx へのハッキングの結果です

WPF 描画デモ

で、ソースコードはこちら。

//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);
                }
                );
        }

ここで詳細な説明を含む私の投稿を読み、ここでソースコードをダウンロードしてください

お役に立てれば

于 2009-11-21T05:41:22.773 に答える
9

もう 1 つの有用なリソースは、Reactive Extensions (Rx) Koansです。Rx の学習に役立つ 55 の漸進的な例

于 2012-02-16T09:54:17.110 に答える
5

http://www.introtorx.comを読んでいます。これは、名前が示すように簡潔な紹介のようです。ステップバイステップの(非常に基本的な)例がかなり多く、主にコンソールを使用して出力しているようです。

于 2013-12-23T08:49:14.270 に答える
4

Windows フォーム用のWes Dyer によるドラッグ アンド ドロップ サンプルのバリエーションを次に示します(おそらく、EnableDragging を拡張メソッドにします)。

    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));
    }  
于 2009-11-21T19:36:45.983 に答える