Как настроить binding внутри собственных UserControl?

Пробую создать свой кастомный контрол. Но столкнулся с тем, что в нём не работает Binding к заданному мною свойству.

У класса контрола есть свойство Text (это же не техническое имя? Его можно использовать?) Внутри контрола к нему привязан текст в TextBox

Text="{Binding Text, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"

Сам класс реализует интерфейс INotifyPropertyChanged

Вот его реализация (она нормальная? Такую можно использовать?):

    public event PropertyChangedEventHandler? PropertyChanged;

    protected void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChanged?.Invoke(this, e);
    }

    protected void SetOptions<T>(string property, ref T variable, T value)
    {
        variable = value;
        OnPropertyChanged(new PropertyChangedEventArgs(property));
    }

Покопавшись понял, что для того, что бы была возможность выполнять Binding, ужно делать через DependencyProperty (в этом случае нужен вообще INotifyPropertyChanged ?) Сделал следующее :

    public static readonly DependencyProperty TextProperty;
    
    static ConsoleTextBox()
    {
        TextProperty = DependencyProperty.Register(
            nameof(Text),
            typeof(string),
            typeof(ConsoleTextBox));
    }

В самом свойстве прописал вот так вот :

    public string? Text
    {
        get { return (string)GetValue(TextProperty); }
        set {
            SetValue(TextProperty, value);
            //SetOptions(nameof(Text), ref _text, value);//Так до этого вызывал INotifyPropertyChanged
        } 
    }

Цепляться к нему пытаюсь вот так :

<local:ConsoleTextBox Text="{Binding Input, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

Но почему-то ничего не происходит и текст не меняется, при изменении значений Input. Хотя тут же добавил обычный TextBlock и точно так же сделал Binding, и в нём всё работает. Я что-то явно делаю не так, но не могу понять, что именно.

Тестовый проект с моими попытками реализации : https://github.com/spasskiy/ConsoleTextBoxTestProject

Из другого элемента пробую биндиться к моему

<TextBox Text="{Binding ElementName=consoleTextBox, Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

Биндинг прекрасно работает с обеих сторон и в обе стороны. А из моего контрола почему-то нет.


Ответы (0 шт):