2012-12-05 9 views
6

텍스트 상자의 텍스트를 내 클래스의 속성에 바인딩하려고하는데 작동하지 않고 코드의 속성을 편집하고 있지만 텍스트 상자에 문자열이 표시되지 않습니다. 이것은 클래스이며, 바인딩하려는 속성은 songFolder입니다. 자원 난 바인딩 트링하고 텍스트 박스 느릅 함유 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

,

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

그리고 디버깅하는 동안 나는 재산가 c 것을보고 걸려 있지만 텍스트 상자의 텍스트가 아닙니다.

+0

귀하의 통지 :

browseBox.DataContext = new song(); 

그런 다음 업데이트 텍스트 상자에 발견 이벤트에 잘못된 속성이 있습니다 :'NotifyPropertyChanged ("sPath");'NotifyPropertyChanged ("songsFolder")'이어야합니다. – McGarnagle

+0

고마워, 변경 했어. 여전히 작동하지 않아. – alostr

+1

그냥 "작동하지 않는"것 이상의 잘못된 점을 설명하면 도움이 될 것입니다 ... – McGarnagle

답변

2

NotifyPropertyChanged 이벤트에 전달 된 문자열은 속성 자체와 동일한 이름이어야합니다. 또한

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에 내부, 뒤 (W/아웃 정적 키)

코드이 방법을 시도 할 수 있습니다 :

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

추가되었지만 여전히 작동하지 않습니다. 내가 폴더 브라우저 대화 상자를 열고 선택한 경로에 따라 songsFolder 속성을 변경했지만 텍스트 상자에이 파일이 표시되지 않습니다. – alostr

+0

@ user1622986 업데이트 됨 .. 창 (edit 참조)을 설정하십시오. –

+0

Can ' 그렇게하지 않으면, 윈도우의 dataContext를 사용하여 노래 목록을 목록 상자에 바인딩합니다. – alostr