2009-11-12 18 views
42

मैं इस वर्ग है:WPF: सरल पाठ बॉक्स डेटा बाइंडिंग

public partial class Window1 : Window 
{ 
    public String Name2; 

    public Window1() 
    { 
     InitializeComponent(); 
     Name2 = new String('a', 5); 
     myGrid.DataContext = this; 
    } 

    // ... 
} 

और मैं पाठ बॉक्स में स्ट्रिंग Name2 प्रदर्शित करना चाहते हैं।

<Grid Name="myGrid" Height="437.274"> 
    <TextBox Text="{Binding Path=Name2}"/> 
</Grid> 

लेकिन स्ट्रिंग प्रदर्शित नहीं होती है। साथ ही, यदि स्ट्रिंग Name2 को TimerCallback का उपयोग करके समय-समय पर अपडेट किया गया है, तो क्या मुझे यह सुनिश्चित करने के लिए कुछ भी करने की ज़रूरत है कि डेटा बदलते समय टेक्स्टबॉक्स अपडेट हो जाए?

+2

एक टिप के रूप में, आप चार रिक्त स्थान से इंडेंट या 101010 बटन का उपयोग करके कोड फ़ॉर्मेट कर सकते हैं! – itowlson

उत्तर

63

नाम 2 एक क्षेत्र है। डब्ल्यूपीएफ केवल गुणों के लिए बांधता है। यह करने के लिए परिवर्तित करें:

public string Name2 { get; set; } 

चेतावनी दी जानकारी होनी चाहिए कि इस न्यूनतम कार्यान्वयन के साथ, अपने पाठ बॉक्स NAME2 के लिए प्रोग्राम-संबंधी परिवर्तन का जवाब नहीं होगा। अपने टाइमर अद्यतन परिदृश्य के लिए तो, आप INotifyPropertyChanged को लागू करने की आवश्यकता होगी:

partial class Window1 : Window, INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    // usual OnPropertyChanged implementation 

    private string _name2; 

    public string Name2 
    { 
    get { return _name2; } 
    set 
    { 
     if (value != _name2) 
     { 
     _name2 = value; 
     OnPropertyChanged("Name2"); 
     } 
    } 
    } 
} 

आप इस अपने विंडो वर्ग पर बजाय वस्तु एक अलग डेटा में जाने पर विचार करना चाहिए।

+0

INOTifyPropertyChanged इंटरफेस को लागू करने पर एमएसडीएन से उदाहरण (डेमो कस्टमर कार्यान्वयन पर स्क्रॉल करें): http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx –

5

आपकी विंडो आवश्यक डेटा बाध्यकारी अधिसूचनाओं को लागू नहीं कर रही है कि ग्रिड को इसे डेटा स्रोत, अर्थात् INotifyPropertyChanged इंटरफ़ेस के रूप में उपयोग करने की आवश्यकता है।

आपकी "नाम 2" स्ट्रिंग को एक संपत्ति होने की आवश्यकता है, न कि सार्वजनिक चर, क्योंकि डेटा बाइंडिंग गुणों के उपयोग के लिए है।

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

3

बस भविष्य की ज़रूरतों के लिए।

विंडो स्टूडियो के लिए .NET Framework 4.5 के साथ विजुअल स्टूडियो 2013 में, इसे काम करने के लिए ElementName=window जोड़ने का प्रयास करें। मैन्युअल br टैग के साथ आसपास mucking की बचत होती है और भागने कोण कोष्ठक -

<Grid Name="myGrid" Height="437.274"> 
    <TextBox Text="{Binding Path=Name2, ElementName=window}"/> 
</Grid> 
संबंधित मुद्दे