6

テキストボックスのテキストをクラスのプロパティにバインドしようとしていますが、機能していません。コードビハインドでプロパティを編集していますが、テキストボックスに文字列が表示されません。これはクラスです。バインドしようとしているプロパティは、songFolder と呼ばれます。

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

デバッグ中に、プロパティが変更されていることがわかりましたが、テキストボックス内のテキストは変更されていません。

4

1 に答える 1

2

NotifyPropertyChanged イベントに渡される文字列は、プロパティ自体と同じ名前である必要があります。

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

また、

テキストボックスのバインディングに UpdateSourceTrigger="PropertyChanged" を追加してみてください

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

編集: DataContext が正しく設定されていない可能性があります。この方法を試すこともできます(静的キーなし)

ウィンドウの Ctor 内のコードビハインド:

browseBox.DataContext = new song();

次に、textBox の検索結果を次のように更新します。

<TextBox Name="browseBox" Text="{Binding Path=songsFolder, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="0"></TextBox>
于 2012-12-05T22:49:04.343 に答える