2008-09-18 6 views
14

चलो कहते हैं कि मैं एक वर्ग करते हैं:मैं सरणी बाध्यकारी अद्यतन करने के लिए INOTifyPropertyChanged का उपयोग कैसे करूं?

class Foo 
{ 
    public string Bar 
    { 
    get { ... } 
    } 

    public string this[int index] 
    { 
    get { ... } 
    } 
} 

मैं का उपयोग कर "{बाइंडिंग पथ = बार}" और इन दोनों के गुण के लिए बाध्य कर सकते हैं "{बाइंडिंग पथ = [x]}"। ठीक।

अब मान लीजिए कि मैं INotifyPropertyChanged को लागू करना चाहते हैं:

class Foo : INotifyPropertyChanged 
{ 
    public string Bar 
    { 
    get { ... } 
    set 
    { 
     ... 

     if(PropertyChanged != null) 
     { 
     PropertyChanged(this, new PropertyChangedEventArgs("Bar")); 
     } 
    } 
    } 

    public string this[int index] 
    { 
    get { ... } 
    set 
    { 
     ... 

     if(PropertyChanged != null) 
     { 
     PropertyChanged(this, new PropertyChangedEventArgs("????")); 
     } 
    } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

किस हिस्से में चला जाता है चिह्नित ????? (मैंने स्ट्रिंग की कोशिश की है। फोर्मेट ("[{0}]", अनुक्रमणिका) और यह काम नहीं करता है)। क्या यह डब्ल्यूपीएफ में एक बग है, क्या कोई वैकल्पिक वाक्यविन्यास है, या यह बस इतना है कि INotifyPropertyChanged सामान्य बाध्यकारी के रूप में शक्तिशाली नहीं है?

उत्तर

13

कैमरून के सुझाव के लिए धन्यवाद, मैं सही सिंटैक्स है, जो मिल गया है:

Item[] 

सब कुछ (सभी इंडेक्स वैल्यू) अनुक्रमित संपत्ति के लिए बाध्य अद्यतन करता है कौन सा।

3

यह सुनिश्चित करने के लिए नहीं पता कि यह काम करेगा, लेकिन परावर्तक दिखाता है कि अनुक्रमित संपत्ति के लिए प्राप्त करने और सेट विधियों को get_Item और set_Item कहा जाता है। शायद आप आइटम आज़मा सकते हैं और देख सकते हैं कि यह काम करता है या नहीं।

5
PropertyChanged(this, new PropertyChangedEventArgs("Item[]")) 
सभी अनुक्रमित के लिए

और

PropertyChanged(this, new PropertyChangedEventArgs("Item[" + index + "]")) 
एक आइटम के लिए

अभिवादन, Jerod

+1

क्या आपने यह कोशिश की? PropertyChangedEventArgs ("आइटम [" + कुंजी + "]") स्ट्रिंग कुंजी के साथ मेरे लिए काम नहीं करता है। –

+0

न ही मेरे लिए एक पूर्णांक के साथ :( – VitalyB

+0

PropertyChangedEventArgs ("आइटम [" + कुंजी + "]") मेरे लिए काम नहीं करता है, हालांकि मुझे यकीन है कि यह पसंद है! –

6

अपने कोड में तार से बचना है, तो आप लगातार Binding.IndexerName, जो वास्तव में "Item[]" है उपयोग कर सकते हैं

new PropertyChangedEventArgs(Binding.IndexerName)