2010-12-10 5 views
0

コードで作成したオブジェクトにWPFコントロールの属性をバインドするにはどうすればよいですか?例えばXAMLのオブジェクトプロパティにコントロール属性をバインドします

、私はXAMLのスニペット持っていると言う:

<TextBlock Text="(title name here)"/> 

を、私はC#でこのクラスを持っている:

public class Article 
{ 
    public string Title { get; set; } 
    public DateTime Published { get; set; } 
    public string Body { get; set; } 
} 

と私はオブジェクトがあります。

Article a = new Article(); 
a.Title = "Foo"; 

を基本的に、TextBlockには、a.Titleが設定されているものを常に表示させるにはどうすればよいですか?

私の例では、記事のリストと記事の詳細セクションのあるウィンドウがあります(これを行うより良い方法があります)。記事を選択すると、詳細セクションが表示されます。

答えて

4

は、次を使用します。

<TextBlock Text="{Binding Title}" /> 

これはのTextBlock要素のためのDataContextは、あなたの記事タイプのインスタンスに設定されていることを前提としています。しかし、通常MVVMを使用することをお勧めします。この場合、ビューのDataContextは対応するビューモデルになります。この場合、ビューモデルにはArticle型のプロパティがあります。バインディング式は{Binding MyArticleProperty.Title}になります。

コードでこのプロパティ値が変更されたときにUIを更新するには、依存関係プロパティを使用するか、ビューモデルにINotifyPropertyChangedを実装するかのいずれかでバインドを無効にする必要があります。

+0

ええと...私はMVVMに慣れていません。私はそれを見上げるだろう、私は思います... –

+1

http://csharperimage.jeremylikness.com/2010/04/model-view-viewmodel-mvvm-explained.html素晴らしい記事です – devdigital

3

はあなたがXAMLオブジェクトのDataContextの上でタイプArticleArticlePropプロパティを持っていると仮定するとBinding例えば:

<TextBlock Text="{Binding ArticleProp.Title}"/> 

を使用する必要があります。

TextBlockを自動的に更新する場合は、ArticleINotifyPropertyChangedを実装する必要があります。

+0

参照先のXAMLオブジェクトとは何ですか? –

+0

TextBlockタグを持つXAMLファイルでは、ArticlePropをDataContextのプロパティにする必要があります。 –

関連する問題