2011-05-10 14 views
5

Estoy tratando de jugar con la extensión reactiva en el laboratorio, pero no pude registrarme usando la API FromEvent (obtengo una excepción de tiempo de compilación). Deseo recibir eventos cuando se invoca la propiedad textchanged en el control de cuadro de texto, ¿alguien puede sugerir qué estoy haciendo mal en la conversión a través de FromEvent API? De alguna manera, no puedo escribir fundir o convertir de TextChangeEventArgs/EventHandler a EventHandler; muéstrenme el camino correcto para hacerlo. Gracias.Reactive Extension - Observable.FromEvent typecast conversion

 internal delegate void TextChangedEventArgs(object sender, EventArgs e); 
     var txt = new TextBox(); 

     var form = new Form 
         { 
          Controls = { txt } 
         }; 


     var subscription = Observable.FromEvent<EventHandler, TextChangedEventArgs>(
      x => (a, b) => new EventHandler(), ?????? 
      x => txt.TextChanged += x, 
      x => txt.TextChanged -= x 
      ); 

     IDisposable eventSubscription = subscription.Subscribe(
      x => Console.WriteLine("Subscriber Got " + x), 
      x => Console.WriteLine("An exception has occured" + x), 
      () => Console.WriteLine("Action completed")); 

     Console.WriteLine("in here"); 
     using (new CompositeDisposable(eventSubscription)) { Application.Run(form); } 

     Console.ReadKey(); 

Respuesta

11

Prueba esto:

var subscription = Observable.FromEventPattern<TextChangedEventArgs>(txt, "TextChanged"); 
+0

Encontré mi solución en el espacio de nombres 'Microsoft.Phone.Reactive' de MSDN. El RX-Team parece cambiar tales cosas en sus API frecuentemente. Gracias por tu pista. – Nappy

3

Probar:

var subscription = Observable.FromEvent(h => txt.TextChanged += h, 
             h => txt.TextChanged -= h); 
+0

Estoy usando una aplicación basada en consola y usando Windows.Form dll/namespace, TextChangedEventHandler es un delegado de presentación de WPF, ¿hay alguna manera de hacerlo con winform? –

+0

@Rohit Sharma - vea mi ejemplo corregido de un winforms TextBox –

+2

Gracias James - Probé esto antes pero obtengo un error de tiempo de compilación "no puedo convertir implícitamente el tipo System.Action a System.EventHandler" –

0

Prueba esto (edición: si se dirigen a Windows Phone Reactive API):

var subscription = Observable.FromEvent<TextChangedEventArgs>(txt, "TextChanged"); 
+1

no veo esta sobrecarga en la última biblioteca de RX que descargué el último viernes –

+3

Se renombró a FromEventPattern – Schneider