के अंदर अज्ञात ईवेंट हैंडलर से सदस्यता छोड़ना मेरे पास INotifyPropertyChanged
लागू करने वाली किसी ऑब्जेक्ट की PropertyChanged
ईवेंट की सदस्यता लेने के लिए एक एक्सटेंशन विधि है।एक स्थिर विधि (एक्सटेंशन विधि)
मुझे लगता है कि घटना सिर्फ एक बार आग लगती है। और नहीं।
यह मेरी विधि है।
public static void OnPropertyChanged<T>(this INotifyPropertyChanged target, string propertyName, Action action)
{
if (target == null)
{
return;
}
PropertyChangedEventHandler handler = (obj, e) =>
{
if (propertyName == e.PropertyName)
{
action();
}
};
target.PropertyChanged -= handler;
target.PropertyChanged += handler;
}
लेकिन यह काम नहीं करता है। मैं ईवेंट हैंडलर को हटा नहीं सकता हूं इसलिए जब भी मैं इस विधि को कॉल करता हूं तो घटना आग लगती है।
मैंने एक अलग दृष्टिकोण की कोशिश की है। बेनामी विधियों का उपयोग करने के बजाय, कुछ और पारंपरिक, इस तरह:
public static void OnPropertyChanged<T>(this INotifyPropertyChanged target, string propertyName, Action action)
{
if (target == null)
{
return;
}
target.PropertyChanged -= target_PropertyChanged;
target.PropertyChanged += target_PropertyChanged;
}
static void target_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
//do stuff here
}
और यह ठीक काम करता है। घटना सिर्फ एक बार आग लगती है, लेकिन मुझे एक्शन पैरामीटर की भी आवश्यकता है। मैं इस दृष्टिकोण के साथ इसका उपयोग नहीं कर सकता।
इस मुद्दे को हल करने के लिए कोई कामकाज या अलग अपमान? क्या स्थिर तरीकों के अंदर अज्ञात तरीकों के साथ कुछ अजीब है?
अग्रिम धन्यवाद।
+1, लेकिन मुझे लगता है कि यह अनावश्यक रूप से जटिल है: एक 'शब्दकोश <स्ट्रिंग, PropertyChangedEventHandler> 'प्रति संपत्ति नाम के एक प्रतिनिधि को पकड़ सकता है। (हाँ, यह एक अलग तरह का कंटेनर वर्ग है।) – hvd
हाँ, मैं बस एक सामान्य समाधान प्रस्तुत करना चाहता था। जो मैं स्पष्ट रूप से व्यक्त करने की कोशिश कर रहा था वह यह है कि बंद होने के साथ अज्ञात विधियां दृश्यों के पीछे एक कंटेनर क्लास उत्पन्न करती हैं जिसमें कैप्चर किए गए चर के संदर्भ शामिल हैं। तो अनिवार्य रूप से यह वही व्यवहार है लेकिन आप स्पष्ट कर रहे होंगे .. –
बहुत बहुत धन्यवाद। यह काम करता हैं!!! 'PropertyChangedEventHandler' बस एक बार आग लगती है। – Nadya