преобразователи значений супер Curstom в Xamarin - PullRequest
0 голосов
/ 09 октября 2018

У меня есть приложение форм Xamarin, в котором я показываю результаты от разных датчиков в одном ListView.Каждый датчик заполняет ViewTell «DataTemplate», где я показываю имя, местоположение и другие значения, и в центральной сетке значения.

Дело в том, что визуализация для этих значений должна отличаться для каждого датчика (представьте, что янужна стрелка для ветра, растущая синяя рамка для собранной воды, число для температуры и т. д.)

Можно ли вернуть пользовательский элемент UIElement, сетку или что-либо из IValueConverterи быть в состоянии сделать эту задачу?Если нет, что бы вы порекомендовали?

PS: я думаю, что то, что я хочу сделать, делается через ContentPresenter.но .. я не могу найти правильные детали о том, как этого добиться.

1 Ответ

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

Похоже, что DataTemplateSelector должно решить вашу проблему:

DataTemplateSelector может использоваться для выбора DataTemplate во время выполнения на основе значения свойства с привязкой к данным.Это позволяет применять несколько DataTemplates к одному и тому же типу объекта для настройки внешнего вида определенных объектов.В этой статье показано, как создать и использовать DataTemplateSelector.

Официальные документы: Создание Xamarin.Forms DataTemplateSelector

Создание DataTemplateSelector:

public class PersonDataTemplateSelector : DataTemplateSelector
{
  public DataTemplate ValidTemplate { get; set; }
  public DataTemplate InvalidTemplate { get; set; }

  protected override DataTemplate OnSelectTemplate (object item, BindableObject container)
  {
    return ((Person)item).DateOfBirth.Year >= 1980 ? ValidTemplate : InvalidTemplate;
  }
}

Использование DataTemplateSelector в XAML:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Selector;assembly=Selector" x:Class="Selector.HomePage">
    <ContentPage.Resources>
        <ResourceDictionary>
            <DataTemplate x:Key="validPersonTemplate">
                <ViewCell>
                   ...
                </ViewCell>
            </DataTemplate>
            <DataTemplate x:Key="invalidPersonTemplate">
                <ViewCell>
                   ...
                </ViewCell>
            </DataTemplate>
            <local:PersonDataTemplateSelector x:Key="personDataTemplateSelector"
                ValidTemplate="{StaticResource validPersonTemplate}"
                InvalidTemplate="{StaticResource invalidPersonTemplate}" />
        </ResourceDictionary>
    </ContentPage.Resources>
  ...
</ContentPage>

<ListView x:Name="listView" ItemTemplate="{StaticResource personDataTemplateSelector}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...