Как установить контекст привязки в ListView относительно внешнего контекста привязки? - PullRequest
0 голосов
/ 07 сентября 2018

Код ниже должен дать вам довольно хорошее представление о том, с чем я работаю. Каждый 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 Ответ

0 голосов
/ 07 сентября 2018

позже мы сможем решить проблему с виджетами OnFire, имеющими отдельный цвет.

Вы можете определить шаблоны данных и использовать селектор шаблонов данных. Пожалуйста, смотрите https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/templates/data-templates/selector

Каждый элемент, который будет отображаться в виде списка, будет вызывать селектор. если вы можете определить, является ли виджет onFire, посмотрев на некоторые свойства объекта. этот метод будет работать. если нет, дайте мне знать, есть другие мысли.

извините, я попытался отформатировать вывод этого поста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...