数据绑定属性不起作用

时间:2013-07-11 10:34:49

标签: windows-phone-7 data-binding user-interface

首先抱歉我的英语。

我正在开发一个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";

但是,当应用程序启动并加载页面时,文本块不会显示任何内容。我只是不明白我错过了什么,或做错了。

如果有人能让我了解数据绑定结构,或者至少可以解释一下我做错了什么以便自己能够解决这个问题,我将不胜感激。

先谢谢你们!

2 个答案:

答案 0 :(得分:0)

您需要在想要绑定效果之前分配DataContext。因此,只要文本框中有更改,您就可以在textchanged事件中编写代码。

this.DataContext=TestText

您需要执行的另一项更改是您实际上并未设置该属性。它应该像

TestText=TestInput.Text

答案 1 :(得分:0)

为了解你的绑定我正在提出一个简单的工作示例..请遵循这个.. 这是您将文本框的数据绑定到someproperty 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));
        }
    }
}