2011-01-09 17 views
0

私はWPFの新機能です。WPFデータバインディングの問題

私はwpfアプリを持っています。そこには単にドックパネルがあり、ドックパネルの中にはテキストブロックがあります。

私はカスタムオブジェクトのプロパティにtextblockのtextプロパティをバインドしたいが、それは動作しません。

私はここに何かが不足していると思いますが、何がわからないのでしょうか。

ここにコードスニペットがあります。

 <TextBlock Text="{Binding Source=myDataSource, Path=ColorName}"/> 
</DockPanel> 

マイカスタムクラス。

class MyData 
    { 
     public string ColorName { get; set; } 
} 

とメインウィンドウコンストラクタ

..

public partial class MainWindow : Window 
    { 
     MyData myDataSource; 
     public MainWindow() 
     { 
      InitializeComponent(); 
      myDataSource = new MyData { ColorName = "Red" }; 
    } 
} 

答えて

1

MyDatasourceのは、getとsetを必要とします。

<TextBlock Text="{Binding MyDataSource.ColorName}"/> 

編集申し訳ありませんが、私は正しいコード

に変更しました。この間違って持って - あなたはまた、ウィンドウのためのDataContextを設定する必要があるので、それは

public partial class MainWindow : Window 
{ 
    public MyData MyDataSource { get; set; } 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = this; 
     MyDataSource = new MyData { ColorName = "Red" }; 
    } 
} 

public class MyData 
{ 
    public string ColorName { get; set; } 
} 

をBE-必要があり、XAMLコードをする必要があります

+0

私はそれをしましたが、でも、私は、今 –

+0

@Praveenごめんそのことについての私のTextBlockのTextプロパティにUを値 "赤" をすることができます表示されませんDataContextと何が追加する必要があったか教えてください –

+0

ありがとうQuinn351それを固定し、 –

0
  1. バインドするものは、 パブリックプロパティである必要があります。 (あなたのデータオブジェクトは、同様にその条件を満足する必要がある)
  2. InitializeComponent()結合 意志があなたの結合に応じて更新されない場合があります前に、あなたは、プロパティを設定しない限り。
  3. あなたはinitilization後 任意の時点でそれを再度設定し、バインディングを更新したい場合 は INotifyPropertyChangedを実装したり、依存関係プロパティで を動作するはずです。
  4. データは、あなたのウィンドウ内にあるので、あなたはその上でそれにアクセスする必要がある場合があります {バインディングのElementName =ウィンドウ、パス= myDataSource.ColorName}
0

あなただけMyDataにバインドしたい場合は、しないでください独自のウィンドウを設定しますDataContext。あなたにバインドしているデータを設定してください。このようにすれば、データとは何か、そしてどのようなものかが明確になります。

また、BindingSourceを失うと、通常は必要ありません。

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = new MyData { ColorName = "Red" }; 
    } 
} 

public class MyData 
{ 
    public string ColorName { get; set; } 
} 

XAML:

<TextBlock Text="{Binding ColorName}"/> 
関連する問題