Как предоставить BindingContext для шаблона управления - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть шаблон, определенный в App.Xaml

<ResourceDictionary>
        <ControlTemplate x:Key="HomePageTemplate">
            <Label Text="{Binding MyLabelText}"/>
        </ControlTemplate>
</ResourceDictionary>

И я использую его на своей домашней странице

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:cv="clr-namespace:Xamarin.Forms;assembly=Xamarin.Forms.CarouselView"
            xmlns:local="clr-namespace:App.Converters"
            x:Class="App.Views.HomePage"
            ControlTemplate="{StaticResource HomePageTemplate}">

</ContentPage>

Я установил BindingContext моего Homepage в коде.

Разве ControlTemplate не должен наследовать BindingContext HomePage? Потому что я думал, что это так, но мой Label не сохраняет текст от MyLabelText. Как обходится работа с Bindings в этих шаблонах?

EDIT:

Использование этой опции

<ResourceDictionary>
        <ControlTemplate x:Key="HomePageTemplate">
            <Label Text="{TemplateBinding Parent.BindingContext.MyLabelText}"/>
        </ControlTemplate>
</ResourceDictionary>

Также не работает для меня, потому что я использую ControlTemplate в заголовке HomePage, а не внутри его тела.

Это работает НО ЭТО НЕ то, что я ищу:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:cv="clr-namespace:Xamarin.Forms;assembly=Xamarin.Forms.CarouselView"
            xmlns:local="clr-namespace:App.Converters"
            x:Class="App.Views.HomePage"
            >
  <ContentView ControlTemplate="{StaticResource HomePageTemplate}" />
</ContentPage>

1 Ответ

1 голос
/ 12 апреля 2019

С ControlTemplate элементами управления привязка немного отличается.Посмотрите на эти документы: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/templates/control-templates/template-binding

Предполагая, что свойство MyLabelText является частью BindingContext родительского элемента управления, ваш код может выглядеть следующим образом:

<ResourceDictionary>
        <ControlTemplate x:Key="HomePageTemplate">
            <Label Text="{TemplateBinding Parent.BindingContext.MyLabelText }"/>
        </ControlTemplate>
</ResourceDictionary>
...