2012-12-05 5 views
6

Ich versuche, den Text eines Textfelds an eine Eigenschaft in meiner Klasse zu binden, und es funktioniert nicht, ich bearbeite die Eigenschaft im Code hinter, aber ich sehe die Zeichenfolge im Textfeld nicht Dies ist die Klasse und die Eigenschaft, die ich zu binden versuche, heißt songFolder.wpf Textbox Textbindung

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; 
    } 

} 

und der XAML, die Ressource und das Textfeld wich i tring enthält am

<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> 

-------------- zu binden Update- --------------- habe ich die nächste Zeile zu ctor des Fensters:

BrowseBox.DataContext=new song() 

Und während ich sah, Debuggen, dass die Eigenschaft c hängen, aber der Text in der Textbox ist nicht.

+0

Ihre benachrichtigen Das Ereignis hat die falsche Eigenschaft: 'NotifyPropertyChanged (" sPath ");' Sollte 'NotifyPropertyChanged (" songsFolder ")' sein. – McGarnagle

+0

Danke, ich habe es geändert, aber es funktioniert immer noch nicht – alostr

+1

Es könnte uns helfen, wenn Sie erklären, was falsch ist darüber hinaus nur "nicht funktioniert" ... – McGarnagle

Antwort

2

Die Zeichenfolge, die an das NotifyPropertyChanged-Ereignis übergeben wird, sollte denselben Namen der Eigenschaft selbst haben.

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

, auch

versuchen Sie Update = "Property", um die Bindung des textBox

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

Edit: Vielleicht wird das Datacontext nicht richtig eingestellt zu werden. Sie können auch versuchen, diese Methode (W/heraus eine statische Key)

-Code hinter, im Inneren des Ctor des Fensters:

browseBox.DataContext = new song(); 

Dann Update textBox Suche nach:

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

Hinzugefügt, funktioniert immer noch nicht. Im Code dahinter öffne ich einen Ordner-Browser-Dialog und ändere die songsFolder-Eigenschaft entsprechend dem ausgewählten Pfad, aber ich sehe es nicht in dem Textfeld – alostr

+0

@ user1622986 aktualisiert .. Setze den dataContext des Fensters (siehe Edit) –

+0

Can ' Um das zu tun, verwende ich das Fenster dataContext, um eine Liste von Songs an eine Listbox zu binden. – alostr