如何提供BindingContext控件模板

时间:2019-04-12 00:54:28

标签: xamarin.forms binding controltemplate

我有一个在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吗?因为我以为是这种情况,但是我的Label并没有保留MyLabelText中的文字。在这些模板中使用Bindings可以做什么工作?

编辑:

使用此选项

<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 个答案:

答案 0 :(得分:1)

使用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>