绑定DataTemplate Xamarin.Forms中的视图的BackgroundColor

时间:2017-09-08 02:51:37

标签: xaml xamarin layout xamarin.forms

我有一个带有DataTemplate的列表视图,在里面我有一个StackLayout,我需要设置它的背景,但它的颜色是在一个变量...当我以编程方式设置一个对象的背景使用这个变量颜色它工作,但当我尝试在xaml中使用“绑定”它不起作用,我无法以编程方式获得此堆栈,因为它在数据模板中... 我真的需要你的回答.. 一些帮助?

<ListView.ItemTemplate>
                <DataTemplate>
                    <!--<DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding fundoColor}" Value="4">
                                <Setter TargetName="produtos_stack_color" Property="Background" Value="LawnGreen" />
                            </DataTrigger>
                        </DataTemplate.Triggers>-->

                    <ViewCell>

                        <StackLayout x:Name="produtos_stack_color" BackgroundColor="{Binding fundoColor}" VerticalOptions="FillAndExpand" Margin="10,10,10,10">
                            <StackLayout Orientation="Horizontal" Padding="10,10,10,10" BackgroundColor="Black" HorizontalOptions="FillAndExpand">
                                <Image Source="{Binding imagem}" HeightRequest="80" HorizontalOptions="CenterAndExpand" WidthRequest="160" Aspect="Fill"/>

                                <StackLayout Orientation="Horizontal" BackgroundColor="Green" VerticalOptions="Center" HorizontalOptions="CenterAndExpand">
                                    <Label Style="{StaticResource labelsfont}" Text="R$" FontSize="Medium" TextColor="White"/>
                                    <Label Style="{StaticResource labelsfont}" Text="{Binding valor}" FontAttributes="Bold" FontSize="Large" TextColor="White"/>
                                </StackLayout>

                            </StackLayout>

                            <StackLayout Margin="0,0,0,10">
                                <Label Text="{Binding nome}" Style="{StaticResource labelsfont}" FontAttributes="Bold" FontSize="Medium" TextColor="White" VerticalOptions="StartAndExpand" HorizontalOptions="Center"/>
                                <ContentView BackgroundColor="Chartreuse" HorizontalOptions="FillAndExpand">
                                    <Label Style="{StaticResource labelsfont}" Text="{Binding observacao}" TextColor="White" Margin="10,10,10,10" HorizontalOptions="Center" />
                                </ContentView>
                            </StackLayout>

                        </StackLayout>
                    </ViewCell>
                </DataTemplate>

我听说过触发器...但我真的不知道它是如何工作的...... 我需要produtos_stack_color接收颜色

我的代码背后的全局变量......它只是在我的类的构造中设置

InitializeComponent();
fundoColor =  Color.FromHex(this.categEscolhida.corFundo);

1 个答案:

答案 0 :(得分:1)

您只能绑定属性 - 因此您必须在代码隐藏类中创建属性。

public Color FundoColor { get { return fundoColor; } }

其次,为了在XAML中引用此属性,您可以使用Reference扩展名,并将父级指定为Source。例如:

<StackLayout x:Name="produtos_stack_color" 
             BackgroundColor="{Binding FundoColor, Source={x:Reference ParentHost}}" ..>

并确保在XAML的根节点中设置x:Name属性。例如:

<ContentPage x:Name="ParentHost" .. />