INotifyPropertyChanged साथ लिस्टबॉक्स आइटम अपडेट करने का तरीका

वोट
2

मैं एक लिस्टबॉक्स जो वस्तुओं का संग्रह करने के लिए databound है। मैं जिस तरह से आइटम उपयोगकर्ता जो इन वस्तुओं में से एक मेरी कार्यक्रम में स्टार्ट वस्तु है दिखाने के लिए प्रदर्शित किए जाते हैं संशोधित करना चाहते हैं।

मैं इस निम्नलिखित तरीके से करने की कोशिश की, लेकिन लिस्टबॉक्स स्वचालित रूप से अपडेट नहीं होता। नियंत्रण अमान्य भी काम नहीं किया।

एक ही रास्ता मैं प्राप्त कर सकते हैं पूरी तरह से databindings को हटा दें और इसे वापस फिर से जोड़ने की है। लेकिन मेरे मामले में है कि वांछनीय नहीं है।

वहाँ एक और तरीका है?

class Person : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private string _name;
    public string Name
    {
        get
        {
            if (PersonManager.Instance.StartPerson == this)
                return _name +  (Start);                      
            return _name;
        }
        set
        {
            _name = value;
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(Name));
        }
    }

    public Person(string name)
    {
        Name = name;
    }
}

इस वर्ग के जो सूची और आइटम है कि शुरुआत है का प्रबंध करती है

class PersonManager
{
    public BindingList<Person> persons { get; set; }
    public Person StartPerson { get; set; }

    private static PersonManager _instance;
    public static PersonManager Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new PersonManager();
            }
            return _instance;
        }
    }

    private PersonManager()
    {
        persons = new BindingList<Person>();
    }
}

प्रपत्र में मैं निम्नलिखित कोड का उपयोग

    private void button1_Click(object sender, EventArgs e)
    {
        PersonManager.Instance.StartPerson = (Person)listBox1.SelectedItem;
    }
12/03/2009 को 15:29
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
2

मैं बहुत यकीन है कि समस्या यह है कि, जब आप ऐसा करते हैं, आप को प्रभावी ढंग से कर रहे हैं Person.Name गुण एक्सेसर मूल्य बदल "मिल" (और एक सेट एक्सेसर की तरह काम करते जहाँ तक यूआई का संबंध है) है कि कर रहा हूँ।

हालांकि, वहाँ कुछ भी नहीं है कि बाइंडिंग अद्यतन करने है कहना है कि यह हो रहा है है। यदि PropertyChanged लिए बुला लिया गया है जब आप शुरू सेट, मैं इस अद्यतन होगा विश्वास करते हैं।

यह भद्दा है, लेकिन जिस तरह से आप यह लिखा है, मैं आप इस जोड़ सकते हैं और यह काम कर सकता है विश्वास करते हैं (नोट: मैं यह परीक्षण नहीं किया है, तो यह ~ ~ मुद्दों हो सकता है):

private void button1_Click(object sender, EventArgs e)
{
    Person newStart = (Person)listBox1.SelectedItem;
    if (newStart != null)
    {
        PersonManager.Instance.StartPerson = newStart;
        newStart.Name = newStart.Name; // Dumb, but forces a PropertyChanged event so the binding updates
    }
}
12/03/2009 को 15:50
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more