2013-07-11 202 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#上的內容。

但是!!它並沒有在這裏結束。由於textblock沒有顯示任何內容,我拼命試圖將一些普通字符串分配給TestText屬性。像這樣:

TestText = "HELLO WORLD"; 

但是,當應用程序啓動並加載頁面時,textblock不顯示任何內容。我只是不明白我錯過了什麼,或者做錯了什麼。

如果有人能夠讓我知道數據綁定結構,或者至少可以解釋我做錯了什麼,那麼我可以自己弄清楚。

在此先感謝你們!

回答

0

您必須先分配DataContext,然後才能獲得綁定效果。因此,只要文本框發生更改,就會將代碼寫入textchanged事件中。

this.DataContext=TestText 

而且多了一個,你需要執行的變化是,你實際上並沒有設置property.It應該像

TestText=TestInput.Text

0

您結合我把簡單的工作的理解example..just follow this .. 這是你的頁面上的文本框的數據綁定到一些屬性textboxText ..當你完成在這個文本框中寫作。然後所有的書面文字自動進入這個屬性。而且這個屬性也綁定到了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> 

這是你page.cs類中,我還展示瞭如何實現inotifyproperty changed..it將幫助你在未來..

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