我的样本中有以下代码。
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值?有什么建议吗?
提前致谢。
答案 0 :(得分:0)
并不是说你第一次无法获得的值。这是你无法快速获得 。在DataContext
为NULL
时设置绑定时,将以延迟方式解析源,可能稍后由UI线程解析。您在设置绑定后立即询问值,太早以至于无法获得有效结果。
您应该将代码中的行切换为:
test.DataContext = this;
test.SetValueBinding(binding);
这样,绑定会在第一条指令中立即从DataContext中获取值。