2009-08-07 12 views
1

私はWPFをあまり使用していないので、これに対する解決策はおそらくかなり簡単です。WPFバインディングヘルプ

私が開発しているIDEでは、各ソースファイルのVSと同じように、複数のコントロール(テキストエディタ)がタブ内にホストされています。ユーザーが新規をクリックすると、「ホスト」は新しいEditorWindow(usercontrol)を作成し、新しいタブを作成し、作成したEditorWindowを表示するように指示し、currentWindow(EditorWindow型の)プロパティを、現在アクティブです。 EditorWindowの中には、名前がtextEditor(プロパティ)であるテキストエディタがあります。私は何をしようとしていることは、私は

    <StackPanel> 
         <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsIndicatorMarginVisible}" Content="Indicator margin visible" /> 
         <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsLineNumberMarginVisible}" Content="Line number margin visible" /> 
         <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsRulerMarginVisible}" Content="Ruler margin visible (useful for fixed-width fonts only)" /> 
         <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsSelectionMarginVisible}" Content="Selection margin visible" /> 
        </StackPanel> 

を使用しているテキストエディタコントロールのクイックスタートソースからこのコードを取ることであるホストコントロールのXAMLであることを入れて、シンタックスエディタにチェックボックスをバインドします。私は何も役に立たない別のものを試しました。 Controlはすべてのタブをホストするウィンドウの名前であり、pathは明らかにチェックボックスがバインドされているプロパティであると考えられます。私はかなりの問題は、最初の実行時にcurrentWindowは初期化されていないので、私のバインディングはこれまで更新されていないことですが、私はこの問題を解決する方法を失っています。ありがとう!

答えて

1

WPFの初心者であるため、バインディングが機能するためにプロパティが何らかの変更通知を実装する必要があることがわかりません。たとえば、パス "currentWindow.textEditor.IsIndicatorMarginVisible"内のプロパティのいずれかが変更された場合、変更されたことをバインディングエンジンに通知する必要があります。これらのプロパティをDependencyPropertysとして実装すると、変更の追跡が無償で行われます。それ以外の場合は、INotifyPropertyChangedを実装する必要があります。

0

私は、Snoopユーティリティがクイックバインディングデバッグを行う最も簡単な方法であることを発見しました。それを使用して、バインドされたプロパティに役立つ情報があれば教えてください。