Простое связывание данных В КОДЕ с DependencyProperty - PullRequest
2 голосов
/ 02 июня 2011

Приношу свои извинения, поскольку это достаточно упрощенно. Я знаю, что на вопрос дан ответ, но примерно на 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;
    }
}

Кто-нибудь видит, что (болезненно очевидная вещь?) Я скучаю?

Спасибо

John

1 Ответ

4 голосов
/ 02 июня 2011

Следующего должно быть достаточно, чтобы установить желаемую привязку:

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

Проблема с вашим кодом заключается в том, что вы устанавливаете Source и привязку Path к свойству TargetText, и в результате вы получаете структуру, пытающуюся привязаться к TargetText.TargetText, что, очевидно, неправильно.

...