UWP Двусторонняя привязка в шаблоне управления - PullRequest
0 голосов
/ 12 июня 2019

У меня есть пользовательский элемент управления со свойством Text, которое должно быть двусторонне связано со свойством контекста данных.
Привязка происходит только в начале (я думаю, единовременно), но не реагирует ни на какие изменения текста.

мой пользовательский элемент управления:

public sealed class MyTextControl : Control
{
    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
        "Text", typeof(string), typeof(MyTextControl), new PropertyMetadata(default(string)));

    public string Text
    {
        get => (string)GetValue(TextProperty);
        set => SetValue(TextProperty, value);
    }

    public MyTextControl()
    {
        DefaultStyleKey = typeof(MyTextControl);
    }
}

шаблон управления:

<Style TargetType="local:MyTextControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:MyTextControl">
                <Border
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">

                    <TextBox
                        BorderBrush="Black"
                        BorderThickness="1"
                        Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}" />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

я звоню в управление:

<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
    <myTextControl:MyTextControl
        Width="500"
        HorizontalAlignment="Center"
        VerticalAlignment="Center"
        Text="{x:Bind Greeting, Mode=TwoWay}" />

    <Button
        Margin="50"
        HorizontalAlignment="Center"
        VerticalAlignment="Center"
        Content="Submit" />
</StackPanel>

Приветствие - это DP в коде, установленном для Hello World!

Я ожидаю достижения точки останова в Приветствии или Изменения текста в тексте, но это не так.
Похоже, двусторонняя привязка не работает хорошо. Что-нибудь отличается от WPF? Как я могу заставить это работать?

1 Ответ

0 голосов
/ 12 июня 2019

Небольшие изменения по сравнению с WPF, для понимания которых требуется некоторое время.Мне также нужно было обновить шаблон для поддержки двусторонней привязки

Text="{Binding Path=Text, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" />

Было время, когда у нас был FrameworkPropertyMetaData, но не более ...

...