Как привязать себя к унаследованным элементам управления? - PullRequest
0 голосов
/ 15 февраля 2019

Преобразователь запускается следующим образом:

<TextBox Header="Quantity"
         Text="{Binding Quantity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
         extensions:TextBoxRegex.Regex="^[0-9]" extensions:TextBoxRegex.ValidationMode="Forced"
         Background="{Binding (extensions:TextBoxRegex.IsValid), RelativeSource={RelativeSource Self}, Converter={StaticResource ValidationConverter}}" />

, а это не так:

<TextBox
    x:Class="MyApp.Controls.NumericTextBox"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:extensions="using:Microsoft.Toolkit.Uwp.UI.Extensions"
    xmlns:converters="using:MyApp.Converters"
    extensions:TextBoxRegex.Regex="^[0-9]" extensions:TextBoxRegex.ValidationMode="Forced"
    Background="{Binding (extensions:TextBoxRegex.IsValid), RelativeSource={RelativeSource Self}, Converter={StaticResource ValidationConverter}}">
    <TextBox.Resources>
        <converters:ValidationConverter x:Key="ValidationConverter"/>
    </TextBox.Resources>
</TextBox>

при использовании:

<NumericTextBox Header="Quantity" Text="{Binding Quantity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

Как связать сself в унаследованном элементе управления UWP?

Обновление: здесь repro

1 Ответ

0 голосов
/ 18 февраля 2019

Пожалуйста, добавьте свойство UpdateSourceTrigger в родительский класс, как показано ниже.

<TextBox 
 extensions:TextBoxRegex.ValidationType="Email"
 Background="{Binding Path=(extensions:TextBoxRegex.IsValid),
 RelativeSource={RelativeSource Mode=Self}, 
 Converter={StaticResource StringFormatConverter},
 UpdateSourceTrigger=PropertyChanged}" />

Я проверил, работает ли он, попробуйте это и дайте мне знать результат.


Обновление

Я проверил ваш код.Я нашел суть проблемы.

  1. Неправильный x: путь к классу (InheritingTextBoxRepro.Control.NumericTextBox->InheritingTextBoxRepro.NumericTextBox)
  2. Вы не позвонили InitializeComponent, который использовался для инициализации xaml.

Оригинальный код

<TextBox
    x:Class="InheritingTextBoxRepro.Control.NumericTextBox"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:extensions="using:Microsoft.Toolkit.Uwp.UI.Extensions"
    xmlns:converters="using:InheritingTextBoxRepro.Converters"
    extensions:TextBoxRegex.Regex="^[0-9]" extensions:TextBoxRegex.ValidationMode="Forced"
    Background="{Binding (extensions:TextBoxRegex.IsValid), 
        RelativeSource={RelativeSource Self}, 
        Converter={StaticResource ValidationConverter},
        UpdateSourceTrigger=PropertyChanged}">
    <TextBox.Resources>
        <converters:ValidationConverter x:Key="ValidationConverter"/>
    </TextBox.Resources>
</TextBox>

public sealed partial class NumericTextBox 
{

}

Изменено

<TextBox
    x:Class="InheritingTextBoxRepro.NumericTextBox"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:extensions="using:Microsoft.Toolkit.Uwp.UI.Extensions"
    xmlns:converters="using:InheritingTextBoxRepro.Converters"
    extensions:TextBoxRegex.Regex="^[0-9]" extensions:TextBoxRegex.ValidationMode="Forced"
    Background="{Binding (extensions:TextBoxRegex.IsValid), 
        RelativeSource={RelativeSource Self}, 
        Converter={StaticResource ValidationConverter},
        UpdateSourceTrigger=PropertyChanged}">
    <TextBox.Resources>
        <converters:ValidationConverter x:Key="ValidationConverter"/>
    </TextBox.Resources>
</TextBox>

public sealed partial class NumericTextBox 
{
    public NumericTextBox()
    {
        InitializeComponent();

    }
}

Использование

<local:NumericTextBox  Header="Quantity2" Text="{Binding Quantity2, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
...