2009-08-07 4 views
1

저는 WPF를 많이 사용하지 않았으므로 이에 대한 해결책은 매우 쉽습니다.WPF 바인딩 도움말

내가 개발하고있는 ide에는 각 소스 파일에 대해 VS가하는 것처럼 탭에 호스트 된 여러 컨트롤 (텍스트 편집기)이 있습니다. 사용자가 new를 클릭하면 "host"는 새로운 EditorWindow (usercontrol)를 만들고, 새 탭을 만들고, 생성 한 EditorWindow를 표시하도록 탭에 지시하고, (EditorWindow 유형의) currentWindow라는 속성을 현재 활성 상태입니다. 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 유틸리티가 빠른 바인딩 디버깅을하는 가장 쉬운 방법이라는 것을 알았습니다.이 유틸리티를 사용하여 바인딩 된 속성에 유용한 정보를 알려주는 것이 좋습니다.