【问题标题】:Data binding property not working数据绑定属性不起作用
【发布时间】:2013-07-11 10:34:48
【问题描述】:

首先对不起我的英语。

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

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

如果有人能帮我清理数据绑定结构,或者至少解释一下我做错了什么,我将不胜感激。

提前谢谢大家!

【问题讨论】:

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


    【解决方案1】:

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

    this.DataContext=TestText
    

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

    TestText=TestInput.Text

    【讨论】:

      【解决方案2】:

      为了您对绑定的理解,我举了一个简单的工作示例..只需遵循此.. 这是您将文本框的数据绑定到某个属性 textboxText 的页面。当您在此文本框中完成写入后,所有已写入的文本都会自动进入此属性。并且此属性也绑定到 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));
              }
          }
      }
      

      【讨论】:

      • 为什么在 InitializeComponent() 上使用“this”关键字? ???真的有必要吗?我认为“this”是指当前实例,我的意思是,“InitializeComponent();”之间有什么区别?和“this.InitializeComponent();”我不明白
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多