2011-01-31 6 views
0

두 페이지가있는 WPF 응용 프로그램이 있습니다. 1 페이지에는 TextBox (boxSource)가 있습니다. 2 페이지에는 TextBlock (blockDestination)이 있습니다. XAML에서 boxSource의 Text 속성을 blockDestination의 Text 속성으로 databind하고 싶습니다.TextBlock의 텍스트 속성을 TextBox의 텍스트 속성에 바인딩하는 방법

두 번째 페이지의 DataContext는 응용 프로그램이 초기화 될 때 1 페이지로 설정됩니다. 다음과 같이 blockDestination을 설정합니다.

<TextBlock Name="blockDestination" Grid.Row="0" Grid.Column="1" Text="{Binding boxSource, Path=Text, Mode=OneWay}" /> 

이것은 TextBox의 값을 가져 오지 않습니다. 내 생각 엔 TextBox는 속성 대신 변수이기 때문입니다.

누구든지 문제를 설명 할 수 있습니까? 그리고 우아한 해결책이 있습니까? 어떤 도움 우아한 해결책은 모든 페이지에 공통보기 모델을 정의하는 것입니다

답변

2

XAML이 작동하려면 boxSource 변수를 속성으로 정의한 "page one"을 2 페이지의 데이터 컨텍스트로 설정해야합니다. 그러면 setter에서 PropertyChanged 이벤트를 발생시킬 수 있습니다.

Matthias는 맞습니다.하지만이 방법은 구현하기가 쉽지 않으며 MVVM 접근 방식이 장기적으로 더 강력해질 것입니다.

+0

답변 해 주셔서 감사합니다. 나는 MVVM 접근 방식이 더 좋다고 동의하지만 이것은 매우 작고 제한된 사용 응용 프로그램 이었기 때문에 모서리를 자르려고했습니다. 아마 아직도 나쁜 아이디어. – Sako73

1

에 대한

감사합니다. 항상 뷰 모델의 속성에 바인딩해야하며 UI 요소에 바인딩하지 않아야합니다. 뷰 모델을 사용하면 항상 필요한 모든 값에 액세스하고 여러 페이지에서 여러 프레젠테이션을 정의 할 수 있습니다.

고유 한 오브젝트 공간이있는 페이지에 대한 내용을 읽었으므로 UI ​​요소의 페이지 이름이 다를 수 있습니다. 또한 첫 번째 페이지를로드 한 후에 첫 페이지를 사용할 수없는 경우가 발생할 수 있습니다. 바인딩 대상을 사용할 수 없게됩니다.

+0

존재하며 액세스 할 수 있습니다. 내가보기 모델에 대한 귀하의 요점을 참조하십시오; 나는 이것이 모두에 대한 더 나은 해결책이 될 것이라고 동의한다. 나는 여전히 바인딩 동작에 대해 궁금합니다. – Sako73

+0

바인딩 예외가 콘솔 (Visual Studio의 출력 창)에 인쇄되도록 wpf 응용 프로그램의 디버그 출력을 활성화 할 수 있습니다. 아마도 이것은 도움이됩니다. –

관련 문제