2012-02-26 22 views
14

के लिए सदस्यता लेने में लैम्ब्डा अभिव्यक्ति को परिवर्तित नहीं कर सकता है, मैं आरएक्स का उपयोग कर wpf में मानक ड्रैग और ड्रॉप छवि को लागू करने का प्रयास कर रहा हूं।त्रुटि IObservable <Point>

var mouseDown = from evt in Observable.FromEventPattern<MouseButtonEventArgs>(image, "MouseLeftButtonDown") 
          select evt.EventArgs.GetPosition(image); 

      var mouseUp = Observable.FromEventPattern<MouseButtonEventArgs>(this, "MouseLeftButtonUp"); 

      var mouseMove = from evt in Observable.FromEventPattern<MouseEventArgs>(this, "MouseMove") 
          select evt.EventArgs.GetPosition(this); 

      var q = from startLocation in mouseDown 
        from endLocation in mouseMove.TakeUntil(mouseUp) 
        select new Point 
        { 
         X = endLocation.X - startLocation.X, 
         Y = endLocation.Y - startLocation.Y 
        }; 

      q.ObserveOn(SynchronizationContext.Current).Subscribe(point => 
      { 
       Canvas.SetLeft(image, point.X); 
       Canvas.SetTop(image, point.Y); 
      }); 

मैं त्रुटि त्रुटि Cannot convert lambda expression to type 'System.IObserver<System.Windows.Point>' because it is not a delegate type

मैं क्या याद आ रही है मिल सकता है?

+0

आपका कोड मेरे लिए ठीक काम करता है। क्या आपने आरएक्स-मेन और आरएक्स-डब्ल्यूपीएफ का संदर्भ दिया है? – Phil

+0

हाँ मैंने दोनों का संदर्भ दिया है। –

+0

कृपया जांचें कि आपका लक्ष्य प्लेटफ़ॉर्म .NET 4 क्लाइंट प्रोफ़ाइल कहता है और यदि ऐसा है तो इसे .NET 4. – Christoph

उत्तर

29

नामस्थान System.Reactive.Linq में स्थैतिक वर्ग पर्यवेक्षक शामिल है जो आम प्रतिक्रियाशील संयोजकों के लिए सभी एक्सटेंशन विधियों को परिभाषित करता है। यह System.Reactive.dll

के लिए IObservable<T>.Subscribe ऐसे Subscribe(onNext) के रूप में, Subscribe(onNext, onError) लेकिन स्थिर वर्ग System.ObservableExtensions में मुख्य पुस्तकालय में परिभाषित कर रहे हैं विस्तार के तरीकों में रहता है।

tl; डॉ:

  • आरएक्स के लिए आप के लिए भार के आप आयात करना System = using System;
2

इस एक स्पष्ट उत्तर के आधार पर बनाने की जरूरत सदस्यता लें System.Reactive.Linq = using System.Reactive.Linq;

  • आयात करने की आवश्यकता @Gideon Engelberths इस सवाल में 5 वें स्थान पर टिप्पणी करते हैं कि मैं 'सिस्टम का उपयोग कर रहा था'; मेरी कक्षा में निर्देश का उपयोग:

    using System.Reactive.Linq; 
    using System; 
    

    जो तब संकलक मुद्दे को ठीक करता है। धन्यवाद गिदोन।

  • संबंधित मुद्दे