Пользовательский элемент управления Xamarin Forms: свойство зависимостей Forward Entry.Behaviors в составном элементе управления - PullRequest
0 голосов
/ 24 ноября 2018

Я создал пользовательский элемент управления, в который поместил запись Xamarin.Forms.Идея состоит в том, чтобы обернуть исходную запись некоторой дополнительной функциональностью, такой как ошибка проверки ввода, изображения и т. Д., И использовать составной элемент управления во всем приложении Xamarin.Forms.Пока ничего особенного.

Все соответствующие свойства зависимостей Entry перенаправляются в составной элемент управления обтекания, например Text, Style.Теперь проблема возникает, когда я хочу предоставить свойство зависимостей для Behavoirs, которое я хочу перенаправить во вложенный элемент управления Entry.

Есть ли у кого-нибудь опыт «пересылки» вложенных свойств зависимостей, в частности, с Behaviors?

Обновление 2018-11-25:

ValidatableEntry.xaml - это таблица, которая содержит вложенный элемент управления Entry.Свойства Text и Placeholder в Entry привязаны к свойствам локальной зависимости, я называю этот подход «переадресация свойств».

<?xml version="1.0" encoding="UTF-8"?>
<Grid 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="ValidatableEntry"
    x:Name="Control">

    <Entry 
        Grid.Row="0"
        x:Name="Entry"
        Text="{Binding Text, Source={x:Reference Control}, Mode=TwoWay}"
        Placeholder="{Binding Placeholder, Source={x:Reference Control}, Mode=OneWay}">

    </Entry>
</Grid>

ValidatableEntry.xaml.cs содержит открытые свойства зависимостей TextPropery и PlaceholderProperty.Вопрос в том, как я могу переслать свойство Behaviors?Я попробовал следующее, которое не работает:

 public new static readonly BindableProperty BehaviorsProperty =
        BindableProperty.Create(
            nameof(Behaviors),
            typeof(IList<Behavior>),
            typeof(ValidatableEntry),
            default(IList<Behavior>),
            BindingMode.OneWayToSource);

    public new IList<Behavior> Behaviors
    {
        get { return (IList<Behavior>)this.Entry.GetValue(VisualElement.BehaviorsProperty); }
    }
...