2011-12-12 7 views
19

मेरे पास एक स्ट्रिंग प्रॉपर्टी और एक सूची संपत्ति के साथ एक साधारण वर्ग है और मेरे पास INofityPropertyChanged ईवेंट लागू है, लेकिन जब मैं करता हूं। स्ट्रिंग सूची में जोड़ें इस घटना को हिट नहीं किया गया है इसलिए मेरा कनवर्टर प्रदर्शित करने के लिए ListView हिट नहीं है। मैं अनुमान लगा रहा हूं कि संपत्ति में बदलाव के लिए हिट नहीं किया गया है .... मैं उस संपत्ति को इवेंट हिट करने के तरीके में कैसे कार्यान्वित कर सकता हूं ???सूची <string> INotifyPropertyChanged event

क्या मुझे किसी अन्य प्रकार के संग्रह का उपयोग करने की आवश्यकता है ?!

किसी भी मदद के लिए धन्यवाद!

namespace SVNQuickOpen.Configuration 
{ 
    public class DatabaseRecord : INotifyPropertyChanged 
    { 
     public DatabaseRecord() 
     { 
      IncludeFolders = new List<string>(); 
     } 

     #region INotifyPropertyChanged Members 

     public event PropertyChangedEventHandler PropertyChanged; 

     protected void Notify(string propName) 
     { 
      if (this.PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propName)); 
      } 
     } 
     #endregion 

     private string _name; 

     public string Name 
     { 
      get { return _name; } 

      set 
      { 
       this._name = value; 
       Notify("Name"); 
      } 
     } 

     private List<string> _includeFolders; 

     public List<string> IncludeFolders 
     { 
      get { return _includeFolders; } 

      set 
      { 
       this._includeFolders = value; 
       Notify("IncludeFolders"); 
      } 
     } 
    } 
} 

उत्तर

32

पर एक नज़र आप ObservableCollection<string> बजाय List<string> का उपयोग करना चाहिए होना चाहिए। और आपके मामले में मैं _includeFolders पढ़ता हूं - आप हमेशा संग्रह के एक उदाहरण के साथ काम कर सकते हैं।

public class DatabaseRecord : INotifyPropertyChanged 
{ 
    private readonly ObservableCollection<string> _includeFolders; 

    public ObservableCollection<string> IncludeFolders 
    { 
     get { return _includeFolders; } 
    } 

    public DatabaseRecord() 
    { 
     _includeFolders = new ObservableCollection<string>(); 
     _includeFolders.CollectionChanged += IncludeFolders_CollectionChanged; 
    } 

    private void IncludeFolders_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
    { 
     Notify("IncludeFolders"); 
    } 

    ... 

} 
+0

यह पैसा है! धन्यवाद! – theDoke

+0

** ** ** को 'पर्यवेक्षण चयन' का उपयोग क्यों करना चाहिए? – C4u

+0

@ C4u इसका उपयोग WPF (एमवीवीएम पैटर्न) में डेटा बाइंडिंग के लिए किया जा सकता है। – bniwredyc

2

आपका सूची आप के लिए स्वचालित रूप से NotifyPropertyChanged ईवेंट को सक्रिय करने के लिए नहीं जा रहा है।

WPF को नियंत्रित करता है कि बेनकाब एक ItemsSource संपत्ति एक ObservableCollection<T>, जो होगा अद्यतन स्वचालित रूप से जब आइटम जोड़े या निकाले जाने के लिए बाध्य होने के लिए डिजाइन किए हैं।

7

डब्ल्यूपीएफ की सूची बाध्यकारी काम करने का सबसे आसान तरीका एक संग्रह का उपयोग करना है जो INotifyCollectionChanged लागू करता है। यहां करने के लिए एक साधारण बात है ObservableCollection के साथ अपनी सूची को प्रतिस्थापित या अनुकूलित करना।

यदि आप ObservableCollection का उपयोग करते हैं, तो जब भी आप सूची संशोधित करते हैं, तो यह संग्रहChanged ईवेंट को बढ़ाएगा - एक ऐसा ईवेंट जो WPF को अद्यतन करने के लिए बाध्यकारी बताएगा। ध्यान दें कि यदि आप वास्तविक संग्रह ऑब्जेक्ट को स्वैप करते हैं, तो आप वास्तविक संग्रह संपत्ति के लिए संपत्ति परिवर्तनीय ईवेंट को उठाना चाहते हैं।

+0

क्या मैं प्रदर्शन के कारणों के लिए इसका उपयोग नहीं करना चाहते हैं तो क्या होगा? – Brandon

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