将CODE简单数据绑定到DependencyProperty

时间:2011-06-02 13:05:34

标签: data-binding silverlight-4.0 dependencyobject

我很抱歉,因为这很简单,我知道这个问题得到了解答,但在30页左右,我还没有找到我想解决的问题。

我还没有在SL中练习并尝试编写一个简单版本,尝试编写一个绑定到屏幕内属性的TextBox,并在Text更改时更新它,反之亦然(属性更改传播到Text)。由于一些原因,我需要使用DependencyProperties和代码隐藏而不是INotifyPropertyChanged和XAML。

我最近的尝试看起来像这样:

    public partial class MainPage : UserControl
{
    static MainPage()
    {
        TargetTextProperty = DependencyProperty.Register("TargetText", typeof(string), typeof(MainPage), new PropertyMetadata(new PropertyChangedCallback(TextChanged)));
    }

    public readonly static DependencyProperty TargetTextProperty;

    public string TargetText
    {
        get { return (string)GetValue(TargetTextProperty); }
        set { SetValue(TargetTextProperty, value); }
    }

    public MainPage()
    {
        InitializeComponent();

        TargetText = "testing";
        textBox1.DataContext = TargetText;
        Binding ResetBinding = new Binding("TargetText");
        ResetBinding.Mode = BindingMode.TwoWay;
        ResetBinding.Source = TargetText;

        textBox1.SetBinding(TextBox.TextProperty, ResetBinding);
    }

    private static void TextChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        MainPage pg = (MainPage)sender;
        pg.textBox1.Text = e.NewValue as string;
    }
}

任何人都会看到什么(痛苦的显而易见的事情?)我失踪了?

谢谢,

约翰

1 个答案:

答案 0 :(得分:4)

以下内容足以设置您想要的绑定:

textBox1.SetBinding(TextBox.TextProperty, new Binding() { Path = "TargetText", Source = this });

您的代码的问题是您将Source和绑定Path都设置为TargetText属性,因此您会尝试绑定到TargetText.TargetText的框架,这显然是错误的。