首先抱歉我的英语。
我正在开发一个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";
但是,当应用程序启动并加载页面时,文本块不会显示任何内容。我只是不明白我错过了什么,或做错了。
如果有人能让我了解数据绑定结构,或者至少可以解释一下我做错了什么以便自己能够解决这个问题,我将不胜感激。
先谢谢你们!
答案 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));
}
}
}