Привязка в моем пользовательском элементе управления не работает - PullRequest
2 голосов
/ 07 февраля 2011

У меня есть созданный мной пользовательский элемент управления с именем TextBoxAndMore, который содержит текстовое поле (называемое textBox1) с кнопкой «еще» рядом с ним.На этом пользовательском элементе управления у меня есть свойство Text.Я хотел бы, чтобы это свойство Text отражало текст в текстовом поле.

Я бы хотел, чтобы это свойство было привязываемым, чтобы в моем XAML я мог связать его со свойством String с именем Description в моей ViewModel, например:

<my:TextBoxAndMore Text="{Binding Path=Description}" />

Итак, я имеюследующий код (сгенерированный фрагментом propdb):

    // Using a DependencyProperty as the backing store for Text.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty TextProperty =
        DependencyProperty.Register("Text", typeof(String), typeof(TextBoxAndMore),
        new UIPropertyMetadata(String.Empty));

    public String Text
    {
        get { return (String)GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }

И в текстовом поле у ​​меня есть этот код, прикрепленный к обработчику событий TextChanged, идея в том, что когда пользователь вводит текст в текстовое поле,свойство Text этого пользовательского элемента управления изменяется вместе с ним:

    private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
    {
        Text = textBox1.Text;
    }

Однако конечный результат заключается в том, что привязка просто не работает.В окне вывода нет ошибок, и мое свойство Description в моей ViewModel просто не устанавливается (оно остается нулевым).

Я уверен, что это что-то очевидное, но я довольно новичок в WPF ибыл бы признателен за некоторые рекомендации.

1 Ответ

2 голосов
/ 07 февраля 2011

Я думаю, вам нужно настроить двухстороннее связывание:

<my:TextBoxAndMore Text="{Binding Path=Description Mode=TwoWay}" />

Вы также можете удалить код события TextChanged в элементе управления, а также использовать привязку TwoWay к свойству Text элемента управления.

Edit:

<-> == двусторонняя привязка ...

TextBlockInControlsTemplate <-> TextDepPropInControl <-> DescriptionPropInVM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...