2010-12-15 17 views
1

WPFに比較的新しいので、明らかに何かが欠けている場合は私にご負担ください。アプリケーションの状態を説明するウィンドウの下部に「サマリー」テキストボックスを作成しています。私はにバインドするプロパティのコードはビットのようになります。複数のソースへのWPF TextBoxのバインド

public String WindowDescription 
{ 
    get { return (radioButton.IsChecked == true ? "A " : "B ") + NameTextBox.Text 
+ " " + (cbRoute.SelectedItem != null? comboBox.SelectedItem.ToString() : ""); } 
} 

そして、私はそうのようなコントロールにバインドされました:

<TextBox IsEnabled="False" Text="{Binding Path=WindowDescription}"/> 

結合まったく動作しません現在、WindowDescriptionで参照されている各コントロールにはデフォルト値がありますが、それらの値でもTextBoxには値が設定されません。私が言ったように、私はWPFの初心者ですから、どのように見えるかにかかわらず、私の例から抜けていることを指摘してください。ありがとう。

+0

yor appのデバッグ出力を見てください。バインディングエラーはありますか? – Jens

答えて

1

いくつかのことがあります。まず、DataContextがWindowDescriptionプロパティを含むクラスのインスタンスに設定されていることを確認します。

通常、ページのコードビハインドでこれを設定します。 XAMLでも設定できますが、私は自分の答えを複雑にしません。

第2に、データバインディングはプロパティ値の変更を自動的に表示しません。通知システムは、WindowDescriptionプロパティを持つクラスで設定する必要があります。

Google「InotifyPropertyChanged」とBingを参照してください。

それ以外の場合は、このビデオをチェックしてください。

http://channel9.msdn.com/blogs/mtaulty/silverlight-databinding-ui-to-net-classes

ルーク

+0

これは解決策を理解するための鍵でした。私は、各コントロールにプロパティをバインドするプライベートクラスを作成し、これらのプロパティの各セッターで、 "this.Summary = getSummary()"を設定して文字列を生成し、これをthis.Summaryに配置しました。 setterはNotifyPropertyChangedEventを作成し、コントロールが変更されるたびにテキストボックスを更新します。ありがとう! –

0

私が推測しなければならないのは、TextBoxのDataContextを(直接か、親のどこかに提供する)設定しなかったと思います。

バインディングパスは要素DataContextを基準にしており、既定のDataContextはnullです(要素自体、またはそのウィンドウを含む)。

0

私はあなたがモデルを設定しなかった、イェンスが正しいと推測していますか?すなわち

あなたのモデルは何も私たちはViewModelにのとMVVMパターンを使用している働く私たちの場合には、
this.DataContext = model; 

。 PrismとUnityのようなものを長期間見ると、XAMLページの.csファイルにすべてのコードを置いているだけです

namespace DataContextTest 

{

パブリック部分クラスのメインウィンドウ:ウィンドウ {パブリックメインウィンドウ(){ this.DataContext =この; MyString = "こんにちは..."; InitializeComponent(); }

public string MyString { get; set; } 

} }

次に、あなたが他のポストに行っているし、それが動作するはずのようMYSTRINGにXAMLバインドで、当然のことながら、再び - この時点では変更通知はありません。私が望むのであれば、その例を掲示することができますが、私はそれをGoogleにして、多くの多くの簡単な例を見ることができると思います。

希望しました。

関連する問題