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# 上的内容。

但!!它并没有在这里结束。由于文本块没有显示任何内容,我最终拼命尝试将一些纯字符串分配给TestText属性。像这样:

TestText = "HELLO WORLD";

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

如果有人可以清理我的数据绑定结构,我将不胜感激,或者至少向我解释我做错了什么,以便我自己弄清楚。

提前谢谢各位!

4

2 回答 2

0

在想要绑定效果之前,你必须先分配DataContext。所以每当文本框发生变化时,你就在textchanged事件中编写代码。

this.DataContext=TestText

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

TestText=TestInput.Text

于 2013-07-11T10:58:05.340 回答
0

为了您对绑定的理解,我放了一个简单的工作示例..请按照此操作..这是您将文本框的数据绑定到某个属性 textboxText 的页面..当您在此文本框中完成写入时。所有的书面文本都会自动出现ino 这个属性。并且此属性也绑定到 textblock 因此当您的 textblock 获得焦点时,它将获得该属性的获取并自动填充它。

<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..它将在未来帮助你..

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));
        }
    }
}
于 2013-07-11T11:22:17.017 回答