(सी # 2010 में प्रो WPF से अंश) सी # में पढ़ते समय प्रो WPF 2010 लेखक लिखते हैं:INotifyProperty के बिना अधिसूचना बदलें बदलें?
"आप प्रत्येक संपत्ति के लिए एक घटना को बढ़ा सकते हैं इस मामले में, घटना नाम PropertyNameChanged होना आवश्यक है (उदाहरण के लिए। , UnitCostChanged)। जब संपत्ति बदल जाती है तो घटना को आग लगाना आपके ऊपर निर्भर करता है। "
क्या कोई इस सुविधा की पुष्टि कर सकता है? मैं प्रयोग किया गया था और इस व्यवहार पुन: पेश करने में सक्षम नहीं (मैं अगर यह इतना काम करता है देखना चाहता हूँ तो मैं गतिशील प्रकार बनाने के लिए System.Reflection.Emit के साथ प्रयोग कर कुछ कर सकते हैं)
संपादित करें: मैं जोर यहाँ स्पष्ट करना चाहिए , INotifyPropertyChanged को लागू करने के बिना परिवर्तन सूचना को लागू करने के रूप में यह है कि क्या किताब
यहाँ दावा कर रहा है है है POCO मैं के साथ परीक्षण कर रहा है:
public class Employee
{
private string _FirstName;
public string FirstName
{
get
{
return _FirstName;
}
set
{
if (_FirstName != value)
{
_FirstName = value;
if (FirstNameChanged != null)
{
FirstNameChanged(this, new PropertyChangedEventArgs("FirstName"));
}
}
}
}
}
मैं एक डेटा ग्रिड को यह बाध्य और पृष्ठभूमि अद्यतन में एक टाइमर है फर्स्टनाम संपत्ति यादृच्छिक रूप से हर कुछ सेकंड onds लेकिन डेटा ग्रिड कभी नहीं आग
<DataGrid x:Name="dgEmployees" ItemsSource="{Binding ElementName=mainWindow, Path=MyEmployees}">
<DataGrid.Columns>
<DataGridTextColumn Header="FirstName" Binding="{Binding Path=FirstName}" />
</DataGrid.Columns>
</DataGrid>
FirstNameChanged घटना हमेशा रिक्त है (मैंने सोचा था कि बाध्यकारी इंजन स्वचालित रूप से इसे करने के लिए सदस्यता सकता है अगर यह नामकरण परंपरा के अनुसार यह पता चला)। MyEmployees सिर्फ एक अवलोकन करने योग्य चयन
क्या कोई यह पुष्टि कर सकता है कि लेखक इस विशेषता का उल्लेख करता है, वास्तव में काम करता है और यदि मैं कोई गलती कर रहा हूं?
संपादित करें: जो सोचता है मैं पाठ की गलत व्याख्या कर रहा हूँ किसी के लाभ के लिए:
"आप इस समस्या को हल करने के लिए तीन तरीकों का उपयोग कर सकते हैं:
आप उत्पाद कक्षा में प्रत्येक संपत्ति बना सकते हैं सिंटैक्स का उपयोग करके एक निर्भरता संपत्ति जिसे आपने अध्याय 4 में सीखा है। (इस मामले में, आपकी कक्षा निर्भरता ऑब्जेक्ट से प्राप्त होनी चाहिए।) हालांकि इस दृष्टिकोण को आपके लिए (जो अच्छा है) के लिए काम करने के लिए WPF प्राप्त होता है, यह सबसे अधिक बनाता है तत्वों में समझ-वर्ग जिनके पास दृश्य एपी है एक खिड़की में नाशपाती। यह उत्पाद जैसे डेटा वर्गों के लिए सबसे प्राकृतिक दृष्टिकोण नहीं है।
आप प्रत्येक संपत्ति के लिए एक ईवेंट बढ़ा सकते हैं। इस मामले में, ईवेंट में नाम होना चाहिए PropertyNameChanged (उदाहरण के लिए, UnitCostChanged)। यह आपके ऊपर पर निर्भर करता है जब संपत्ति बदल जाती है।
आप सिस्टम को कार्यान्वित कर सकते हैं। कॉम्पोनेंटमोडेल.इनोटिफ़ाईप्रॉपर्टी इंटरफ़ेस, जिसे PropertyChanged नामक एक ईवेंट की आवश्यकता होती है। आपको संपत्ति प्रॉपर्टी चेंज इवेंट बढ़ाएं जब भी कोई संपत्ति बदलती है और इंगित करती है कि संपत्ति को स्ट्रिंग के रूप में संपत्ति नाम की आपूर्ति करके बदल दिया गया है। यह WPF के साथ, आप DependencyProperties
या INotifyPropertyChanged
उपयोग करने की आवश्यकता अप को आप इस घटना को बढ़ाने के लिए जब एक गुण परिवर्तन, लेकिन आप प्रत्येक संपत्ति के लिए एक अलग घटना को परिभाषित करने की जरूरत नहीं है अभी भी है। "
सुनिश्चित नहीं हैं कि वाक्य रचना काम करेंगे, लेकिन आप यकीन है कि आप को लागू करने के रूप में वर्ग को सजाने के लिए की जरूरत है INotifyPropertyChanged – Paparazzi
नहीं, यह वास्तव में क्या है मैं मैं इस बात से बचने की कोशिश कर रहा हूं - पुस्तक में, यह उल्लेख करता है कि 3 तकनीकें हैं।) निर्भरता प्रॉपर्टीज बी का उपयोग करें।) इनोटिफ़ाईप्रॉपर्टी चेंज (जिसका मैं पहले से ही परिवार हूं) सी का उपयोग करता हूं।) इस सम्मेलन-आधारित दृष्टिकोण का उपयोग करें जो INotifyPropertyChanged को लागू नहीं करता है। इस तरह का पूरा बिंदु है मैं यहां क्या परीक्षण कर रहा हूं :) – blue18hutthutt
ठीक है लेकिन मुझे नहीं लगता कि दावा किया जा रहा है। आप सीधे NotifyPropertyChanged विधि के बिना ईवेंट बढ़ा सकते हैं, लेकिन मुझे लगता है कि आपको अभी भी INotifyPropertyChanged को लागू करने की आवश्यकता है। – Paparazzi