2009-10-02 11 views
5

मैं मेरे विचार मॉडल में एक संपत्ति के लिए अपने विंडो शीर्षक बाध्य करने के लिए है, इसलिए की तरह कोशिश कर रहा हूँ:WPF - विंडो शीर्षक बाध्यकारी डेटा मॉडल संपत्ति देखने पर

/// <summary> 
    /// The window title (based on profile name) 
    /// </summary> 
    public string WindowTitle 
    { 
     get { return CurrentProfileName + " - Backup"; } 
    } 
:

Title="{Binding WindowTitle}" 

संपत्ति इस तरह दिखता है

CurrentProfileName प्रॉपर्टी किसी अन्य प्रॉपर्टी (CurrentProfilePath) से ली गई है जो किसी भी व्यक्ति को प्रोफ़ाइल खोलने या सहेजने पर सेट किया जाता है। प्रारंभिक स्टार्टअप पर, विंडो शीर्षक ठीक से सेट किया गया है, लेकिन जब कभी भी CurrentProfilePath गुण बदलता है, तो परिवर्तन विंडो शीर्षक पर बबल नहीं होता है जैसा कि मैंने उम्मीद की थी।

मुझे नहीं लगता कि मैं यहां एक निर्भरता संपत्ति का उपयोग कर सकता हूं क्योंकि संपत्ति एक व्युत्पन्न है। जिस मूल संपत्ति से इसे प्राप्त किया गया है वह एक निर्भरता संपत्ति है, लेकिन ऐसा कोई प्रभाव नहीं प्रतीत होता है।

मैं इस संपत्ति के आधार पर फॉर्म शीर्षक स्वयं-अद्यतन कैसे कर सकता हूं?

उत्तर

9

ऐसा इसलिए है क्योंकि डब्ल्यूपीएफ को यह जानने का कोई तरीका नहीं है कि WindowTitleCurrentProfileName पर निर्भर करता है। आपका वर्ग INotifyPropertyChanged को लागू करने की जरूरत है, और जब आप CurrentProfileName का मूल्य बदल, आप के लिए CurrentProfileNameऔरWindowTitle

private string _currentProfileName; 
public string CurrentProfileName 
{ 
    get { return __currentProfileName; } 
    set 
    { 
     _currentProfileName = value; 
     OnPropertyChanged("CurrentProfileName"); 
     OnPropertyChanged("WindowTitle"); 
    } 
} 

अद्यतन

PropertyChanged घटना को बढ़ाने के लिए की जरूरत है यहाँ INotifyPropertyChanged का एक विशिष्ट कार्यान्वयन है :

public class MyClass : INotifyPropertyChanged 
{ 
    // The event declared in the interface 
    public event PropertyChangedEventHandler PropertyChanged; 

    // Helper method to raise the event 
    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
      handler(this, new PropertyChangedEventArgs(propertyName); 
    } 

    ... 
} 
+0

बिंगो। उसने ऐसा किया माध्यमिक प्रश्न - मौजूदा OnPropertyChanged विधि केवल एक निर्भरता प्रॉपर्टी ऑब्जेक्ट को स्वीकार करता है - क्या वास्तव में वास्तविक संपत्ति परिवर्तन ईवेंट और कस्टम ऑनप्रॉपर्टी चेंज विधि को मेरी कक्षा में जोड़ना आवश्यक है या क्या कोई आसान तरीका है? – Chris

+0

हां, आपको ईवेंट घोषित करने की आवश्यकता है। मौजूदा 'OnPropertyChanged' विधि को' निर्भरता ऑब्जेक्ट 'से विरासत में मिला है और यह केवल निर्भरता गुणों के लिए है। –

+0

कोड नमूना –

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