Привязка шаблона в xaml ControlTemplate не работает - PullRequest
0 голосов
/ 18 октября 2018

Из моей укладки ControlTemplate в App.xaml я пытаюсь получить логическое свойство из используемой ViewModel, чтобы сделать элементы (в данном случае ActivityIndicator) видимыми в Content xaml.

Свойство:

Private bool isLoading;
public bool IsLoading
{
   get => this.isLoading;
   set => this.SetProperty(ref this.isLoading, value);
}

Страница содержимого:

ControlTemplate="{StaticResource Template__Page_Scrollable}"

ControlTemplate (я буду интегрировать ActivityIndicator в StackLayout, но сначала я хочу показать только сам StackLayout с помощьюустановив фоновый цвет в Aqua):

    <ControlTemplate x:Key="Template__Page_Scrollable">
        <AbsoluteLayout x:Name="ActivityIndicator">
            <ScrollView Style="{StaticResource Page_Scrollable__ScrollContainer}" AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All">
                <ContentPresenter AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All"/>
            </ScrollView>
            <StackLayout AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All" 
                         IsEnabled="{TemplateBinding Parent.BindingContext.IsLoading}" 
                         IsVisible="{TemplateBinding Parent.BindingContext.IsLoading}" BackgroundColor="Aqua">
            </StackLayout>
        </AbsoluteLayout>
    </ControlTemplate>

Благодаря моим исследованиям это должно сработать, так как я получаю сообщение «Не разрешить символ« Родитель »» Без «Родителя» я всегда получаю истину в результате.

Я пробовал, например:

  • установить дополнительно BindingContext
  • IsEnabled = "{TemplateBinding BindingContext.IsLoading}"
  • IsEnabled = "{TemplateBinding IsLoading} "
  • IsEnabled =" {Binding IsLoading} "

1 Ответ

0 голосов
/ 19 октября 2018

Если вы действительно установили ControlTemplate на ContentPage, например:

<ContentPage 
...
ControlTemplate="{StaticResource Template__Page_Scrollable}">

, это неверно.Parent в ControlTemplate относится к родительскому представлению представления, в котором размещен шаблон элемента управления.ContentPage не имеет родительского представления.

Вместо этого вам необходимо установить шаблон элемента управления для ContentView в ContentPage, например:

<ContentPage ...>
    <ContentView ControlTemplate="{StaticResource Template__Page_Scrollable}" >
       ...
    </ContentView>
</ContentPage>
...