绑定在WPF中第一次不起作用

时间:2014-05-12 10:47:26

标签: wpf binding

我的样本中有以下代码。

 public string MyProperty
 {
     get { return (string)GetValue(MyPropertyProperty); }
     set { SetValue(MyPropertyProperty, value); }
 }

 public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.Register("MyProperty", typeof(string), typeof(MainWindow), new PropertyMetadata("Hello"));

 private TestClass1 test;

 private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
 {
     Binding binding = new Binding
     {
         Path = new PropertyPath("MyProperty"),
         Mode = BindingMode.TwoWay,
         UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
     };
         test.SetValueBinding(binding);
         test.DataContext = this;
         Console.WriteLine(test.Value);
  }

  public class TestClass1 : FrameworkElement
  {
      public object Value
      {
          get { return (object)GetValue(ValueProperty); }
          set { SetValue(ValueProperty, value); }
      }

      public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(object), typeof(TestClass1), new PropertyMetadata(null));

      public void SetValueBinding(Binding binding)
      {
          this.SetBinding(ValueProperty, binding);
      }
   }

设置绑定后,如果我访问test.Value,它第一次返回null。之后,如果我访问它(从另一个方法)它返回正确的值"你好"。 但我不知道第一次为什么绑定不起作用并返回null值?有什么建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

并不是说你第一次无法获得的值。这是你无法快速获得 。在DataContextNULL时设置绑定时,将以延迟方式解析源,可能稍后由UI线程解析。您在设置绑定后立即询问值,太早以至于无法获得有效结果。

您应该将代码中的行切换为:

test.DataContext = this;
test.SetValueBinding(binding);

这样,绑定会在第一条指令中立即从DataContext中获取值。