2013-07-11 7 views
0

영어로 죄송합니다.데이터 바인딩 속성이 작동하지 않습니다.

WP7 앱을 개발 중이며 아직 데이터 바인딩 구조를 완전히 이해하지 못했습니다. 데이터 바인딩을 통해 얻은 데이터가있는 페이지가 있습니다. 데이터는 .cs 내에 생성되며 정상적으로 작동합니다.

그러나 다른 페이지에는 데이터 바인딩에서 가져온 일부 데이터가 있지만 대신 UI 입력 텍스트에서 가져 오길 원합니다. 간단하고, 텍스트 상자와 텍스트 블록 뿐이므로 사용자가 텍스트 상자에 내용을 쓰면 같은 페이지에있는 텍스트 블록에 나타납니다. 그러나 작동하지 않습니다. 텍스트 블록은 비어 있습니다.

<TextBox Name="TestInput"> 
<TextBlock Text="{Binding TestText}"> 

위는 XAML에 무엇이다 :

그것은이 같은입니다.

public partial class NewItem : PhoneApplicationPage 
{ 
    public String TestText { get; set; } 

    public NewItem() 
    { 
     InitializeComponent(); 
     TestText = "TestInput.Text"; 
    } 
} 

그리고 이것은 위는 C#에 무엇이다.

BUT !! 여기서 끝나지 않습니다. 텍스트 블록에 아무 것도 표시하지 않았으므로 필자는 TestText 속성에 일반 문자열을 할당하려고 필사적으로 끝났습니다. 이처럼 :

TestText = "HELLO WORLD"; 

그러나 응용 프로그램이 시작되고 페이지가로드는 TextBlock에 아무것도 표시하지 않을 때. 나는 내가 무엇을 놓치고 있는지, 잘못하고 있는지 이해하지 못한다.

누군가가 데이터 바인딩 구조를 정리해 주거나 적어도 내가 잘못한 것을 설명하면 감사히 생각합니다. 그래서 나 자신을 알아낼 수 있습니다.

미리 감사드립니다.

답변

0

바인딩 효과를 사용하려면 먼저 DataContext를 할당해야합니다. 텍스트 상자에 변경 사항이있을 때마다 textchanged 이벤트에 코드를 작성합니다. 수행해야

this.DataContext=TestText 

그리고 또 하나의 변화는 당신이 실제로 property.It 내가 간단한 작업을 걸었습니다 바인딩의 양해

TestText=TestInput.Text

0

같아야 설정되지 않은 것입니다 예를 들어 이것을 따라 가면 .. 이것은 텍스트 상자의 데이터를 someproperty textboxText ..에 바인딩하는 페이지입니다.이 텍스트 상자에 글쓰기를 마쳤 으면 모든 writententext가 자동으로이 속성으로옵니다. 이 속성은 textbloack에 바인딩되어 있으므로 textbloack에 포커스가있을 때 속성을 가져 와서 자동으로 채 웁니다.

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> 
    <StackPanel Orientation="Horizontal" > 
     <TextBox x:Name="testTextbox" Height="50" Width="200" Text="{Binding TextboxText,Mode=TwoWay}" /> 
     <TextBlock x:Name="testTextblock" Height="50" Width="1000" Text="{Binding TextboxText,Mode=OneWay}" Foreground="White" /> 
    </StackPanel> 
</Grid> 

이 내가 또한 어떻게 inotifyproperty의 changed..it 미래에 도움이 될 것입니다 구현 보여 주었다있는 당신의 page.cs 클래스 ..

public sealed partial class MainPage : Page,INotifyPropertyChanged 
{ 
    public MainPage() 
    { 
     this.InitializeComponent(); 
     this.DataContext = this; 
    } 

    private string _TextboxText; 
    public string TextboxText 
    { 
     get 
     { 
      return _TextboxText; 
     } 
     set 
     { 
      _TextboxText = value; 

      FirePropertyChanged("TextboxText"); 
      testTextblock.UpdateLayout(); 

     } 
    } 


    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    protected void FirePropertyChanged(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
+0

왜 당신입니다 InitializeComponent()에 대해 "this"키워드 사용 ??? 정말 필요한가요? 나는 "this"가 현재 인스턴스를 참조한다고 생각했다. "InitializeComponent();" 이.InitializeComponent(); "이해가 안 돼요. –

+0

실수로 그랬을 수도 있습니다. – loop

관련 문제