2013-07-11 4 views
0

сначала извините мой английский язык.Data binding свойство не работает

Я разрабатываю приложение WP7, и я до сих пор не полностью понял структуру привязки данных. У меня есть страница с некоторыми данными, полученными с помощью привязки данных. Данные генерируются внутри .cs, и он отлично работает.

Но на другой странице у меня есть некоторые данные, которые также получены из привязки данных, но я хочу, чтобы это было из текста ввода пользовательского интерфейса. Это просто, просто текстовое поле и текстовый блок, поэтому пользователь пишет что-то в текстовом поле, и поэтому он отображается на текстовом блоке, который находится на той же странице. Но он не работает, текстовый блок остается пустым.

Это что-то вроде этого:

<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"; 

Но когда приложение запускается и страница загружается, текстовый блок ничего не показывает. Я просто не понимаю, чего мне не хватает, или что-то не так.

Буду признателен, если кто-то сможет очистить меня от структуры привязки данных или, по крайней мере, объяснить мне, что я сделал неправильно, поэтому я могу понять это сам.

Спасибо заранее, ребята!

ответ

0

Вы должны назначить DataContext до того, как вы захотите связать эффект. Поэтому всякий раз, когда есть изменение в текстовом поле, вы пишете код в событии textchanged.

this.DataContext=TestText 

И еще одно изменение, которое необходимо выполнить в том, что вы на самом деле не устанавливая property.It должен быть как

TestText=TestInput.Text

0

для понимания привязки я ставлю простую работу example..just follow this .. это вы страница, на которой вы привязываете данные текстового поля к некоторому текстовому поле TextText..When вы закончили писать в этом текстовом поле. Тогда все writtentext автоматически попадет в это свойство. и это свойство также привязано к 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

Почему ты используя ключевое слово «this» для InitializeComponent(); ??? Действительно ли это необходимо? Я думал, что «это» должно было ссылаться на текущий экземпляр, я имею в виду, какая разница между «InitializeComponent()»; и это.InitializeComponent(); «Я не понимаю –

+0

, то же самое может быть, я сделал это по ошибке .. – loop