2012-12-05 33 views
6

मैं अपनी कक्षा में किसी प्रॉपर्टी में टेक्स्टबॉक्स के टेक्स्ट को बांधने की कोशिश कर रहा हूं, और यह काम नहीं कर रहा है, मैं कोड को पीछे कोड में संपादित कर रहा हूं लेकिन मुझे टेक्स्टबॉक्स में स्ट्रिंग दिखाई नहीं दे रही है यह कक्षा है, और जिस संपत्ति को मैं बांधने की कोशिश कर रहा हूं उसे गीत फोल्डर कहा जाता है।wpf टेक्स्टबॉक्स टेक्स्ट बाइंडिंग

public class song : INotifyPropertyChanged 
{ 
    public string title {get; set; } 
    public string artist { get; set; } 
    public string path { get; set; } 
    public static string folder; 
    public string songsFolder { get { return folder; } set { folder = value; NotifyPropertyChanged("songsFolder"); } } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged(String propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    public song() 
    { 

    } 

    public song(string title, string artist, string path) 
    { 
     this.title = title; 
     this.artist = artist; 
     this.path = path; 
    } 

} 

और XAML, संसाधन और पाठ बॉक्स जो मैं बाध्य करने के लिए tring हूँ युक्त

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WpfApplication1" 
    Title="Song Filler" Height="455" Width="525"> 
<Window.Resources> 
    <local:song x:Key="song"/> 
</Window.Resources> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="auto"/> 
     </Grid.ColumnDefinitions> 
     <TextBox Name="browseBox" Text="{Binding Source={StaticResource ResourceKey=song}, Path=songsFolder, Mode=TwoWay}" Grid.Column="0"></TextBox> 
     <Button Grid.Column="1" Width="auto" Click="Browse">browse</Button> 
    </Grid> 

-------------- update- --------------- मैं खिड़की के ctor को अगली पंक्ति कहा:

BrowseBox.DataContext=new song() 

और जब डिबगिंग मैंने देखा कि संपत्ति सी है लटकाना लेकिन टेक्स्टबॉक्स में पाठ नहीं है।

+0

आपका सूचित करें:

browseBox.DataContext = new song(); 

फिर, अद्यतन पाठ बॉक्स को खोजने घटना में गलत संपत्ति है: 'NotifyPropertyChanged (" sPath ");' होना चाहिए 'सूचित करेंप्रॉपर्टी चेंज ("गाने फ़ोल्डर") '। – McGarnagle

+0

धन्यवाद, मैंने इसे बदल दिया है, लेकिन यह अभी भी – alostr

+1

काम नहीं कर रहा है, अगर आप "काम नहीं कर रहे" से परे क्या गलत है, तो यह हमारी मदद कर सकता है ... – McGarnagle

उत्तर

2

नोटिफ़ाईप्रॉपर्टी चेंजेड ईवेंट में पारित स्ट्रिंग संपत्ति का एक ही नाम होना चाहिए।

public string songsFolder 
{ 
    get 
    { 
     return folder; 
    } 
    set 
    { 
     folder = value; 
     NotifyPropertyChanged("songsFolder"); 
    } 
} 

इसके अलावा,

पाठ बॉक्स

<TextBox Name="browseBox" Text="{Binding Source={StaticResource ResourceKey=song}, Path=songsFolder, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="0"></TextBox> 

संपादित के बंधन की UpdateSourceTrigger = "PropertyChanged" जोड़ने का प्रयास करें: शायद DataContext सही तरीके से सेट नहीं हो रही है। आप भी इस विधि (डब्ल्यू/बाहर एक स्थिर कुंजी)

कोड के पीछे की कोशिश कर सकते हैं, खिड़की के ctor अंदर:

<TextBox Name="browseBox" Text="{Binding Path=songsFolder, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="0"></TextBox> 
+0

इसे जोड़ा गया, अभी भी काम नहीं कर रहा है। कोड के पीछे मैं एक फ़ोल्डर ब्राउज़र संवाद खोलता हूं और गानों को बदलता हूं चयनित पथ के अनुसार फ़ोल्डर संपत्ति, लेकिन मुझे इसे टेक्स्टबॉक्स – alostr

+0

@ user1622986 अपडेट नहीं किया गया है .. डेटा सेट करें विंडो का कॉन्टेक्स्ट (संपादित करें देखें) –

+0

क्या ' ऐसा नहीं करते हैं, मैं एक सूची बॉक्स में गाने की एक सूची बांधने के लिए विंडो डेटा कॉन्टेक्स्ट का उपयोग कर रहा हूं। – alostr