代码之家  ›  专栏  ›  技术社区  ›  user875234

如何在ListView中相对于外部绑定上下文设置绑定上下文?

  •  1
  • user875234  · 技术社区  · 7 年前

    下面的代码应该能让你很好地了解我在用什么。每个 Widget 显示在 ListView StreetName 穿红色的。问题是哪些小部件着火的记录保存在 WidgetsViewModel

    <?xml version="1.0" encoding="utf-8" ?>
    <ContentPage 
                    xmlns="http://xamarin.com/schemas/2014/forms"
                    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                    x:Class="SickProgram.Views.Pages.WidgetsPage"
                    xmlns:ViewModels="clr-namespace:SickProgram.ViewModels">
    
        <ContentPage.BindingContext>
            <ViewModels:WidgetsViewModel />
        </ContentPage.BindingContext>
    
        <StackLayout>
            <ListView ItemsSource="{Binding Widgets}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <StackLayout>
                                <Label Text="{Binding StreetName}"/>
                            </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackLayout>
    
    </ContentPage>
    

    在一个 完美 世界看起来像:

    <!- OnFire is a method in the WidgetsViewModel that takes in a widget Id and returns a color. ->
    <Label Text="{Binding StreetName}" Color={Binding BindingContext.Parent.OnFire(BindingContext.Id)}/>   
    

    1 回复  |  直到 7 年前
        1
  •  1
  •   Neil    7 年前

    您可以定义数据模板并使用数据模板选择器。请看 https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/templates/data-templates/selector

    列表视图将要显示的每个项都将调用选择器。如果可以通过查看对象中的某些属性来确定小部件是否为onFire。这种方法行得通。如果不告诉我还有别的想法。

    推荐文章