2009-05-08 12 views
5

बदलने के लिए डब्ल्यूपीएफ डेटा बाध्यकारी मेरे पास एक उपयोगकर्ता नियंत्रण है जो वर्तमान में लॉग इन उपयोगकर्ता के नाम को प्रदर्शित करता है। मैंने अपने आवेदन में किसी उपयोगकर्ता के उपयोगकर्ता आईडी की संपत्ति के नियंत्रण में टेक्स्टब्लॉक को बाध्य किया है।ऑब्जेक्ट

मुद्दा रहा है कि उपयोगकर्ता आपत्ति मेरी बंधन के रूप में एक स्रोत में हर बार बदलता है एक नया उपयोगकर्ता के लॉग है।

मैं जहाँ मैं एक ईवेंट सक्रिय एक समाधान के बारे में सोच सकता है जब उपयोगकर्ता obejct परिवर्तन और यह वह जगह है मुझे नियंत्रण से पकड़ा जाता है जो फिर बाध्यकारी पुन: प्रारंभ होता है लेकिन यह आदर्श से कम लगता है।

क्या इस मुद्दे का समाधान है, मुझे लगता है कि यह बहुत आम होना चाहिए?

चीयर्स,

जेम्स

+0

क्या यह उपयोगकर्ता ऑब्जेक्ट है जो बदलता है (यदि हां, तो यह कहां सेट है?) या यह UserId है जो बदलता है (उसी उपयोगकर्ता उदाहरण पर)? –

+0

यदि डेटासोर्स बदल रहा है, तो डेटा ऑब्जेक्ट को नई ऑब्जेक्ट पर सेट करना स्वचालित रूप से बाध्य नियंत्रण अपडेट करना चाहिए। यदि एक बाध्य संपत्ति बदल रही है .. आपको INotifyPropertyChanged की आवश्यकता है – Gishu

उत्तर

7

अधिकांश यूआई बाइंडिंग पहले से ही विशेष रूप से (WPF के लिए) INotifyPropertyChanged संपत्ति सूचनाओं के माध्यम से इस संभाल,। - यानी आप एक एकल उदाहरण पर UserId अद्यतन कर रहे हैं, तो:

class User : INotifyPropertyChanged { 
    public event PropertyChangedEventHandler PropertyChanged; 
    protected virtual void OnPropertyChanged(string propertyName) { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if(handler!=null) handler(this, new PropertyChangdEventArgs(
              propertyName)); 
    } 
    private string userId; 
    public string UserId { 
     get {return userId;} 
     set { 
      if(userId != value) { 
       userId = value; 
       OnPropertyChanged("UserId"); 
      } 
     } 
    } 
} 

यह फिर स्वचालित रूप से बाध्यकारी अद्यतन करना चाहिए। आप कर रहे हैं, तो इसके बजाय, वास्तविक उपयोगकर्ता उदाहरण बदल रहा है, तो एक ही चाल पर विचार है, लेकिन जो कुछ भी के खिलाफ उपयोगकर्ता को होस्ट करता है:

public User User { 
    get {return user;} 
    set { 
     if(user != value) { 
      user = value; 
      OnPropertyChanged("User"); 
     } 
    } 
} 

और अगर आप कुछ के "User.UserId" के लिए बाध्य कर रहे हैं, तो यह काम करना चाहिए।

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