Xamarin Binding fuction как ImageSource внутри Listview с привязкой данных - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь визуализировать состояние объекта, называемого MinRepresentation, в ListView ниже.

Я хочу связать функцию ImageSource stateImage(MinRepresentationState state), где я передаю состояние и возвращаюImagesource.

Моя проблема в том, чтобы оценить функцию и передать параметр через xaml.

Visible Orders - это коллекция MinRepresentation, каждая из которых включает State

<ListView HasUnevenRows="True" SelectionMode="Single" ItemsSource="{Binding VisibleOrders}" ItemSelected="OnListViewItemSelected" ItemTapped="OnListViewItemTapped">

***OTHER STUFF***

<StackLayout Orientation="Horizontal" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="3" Padding= "0,5,0,5" BackgroundColor="#CC3F6E3F">

<Image Source="{Binding stateImage(State)" Margin="10,0,0,0" />

<Label Text="{Binding Id, StringFormat='ID: [{0}]'}" FontSize="Small" Margin="5,0,0,0" FontAttributes="Bold" TextColor="#FFFFFF"/>

</StackLayout>

***OTHER STUFF***

</ListView>
public ImageSource stateImage(MinRepresentationState state)
        {

            switch (state)
            {
                case MinRepresentationState.Assigned:
                    return ImageSource.FromResource("state_assigned.png");
            }
        }

Ответы [ 3 ]

0 голосов
/ 03 июня 2019

Вы также можете использовать DataTrigger для установки изображения в вашем XAML

<Image Source="state_default.png" Margin="10,0,0,0">
    <Image.Triggers>
        <DataTrigger TargetType="Image" Binding="{Binding State}" Value="Assigned">
            <Setter Property="Source" Value="state_assigned.png" />
        </DataTrigger>
    </Image.Triggers>
</Image>

Ссылка: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/triggers#data

0 голосов
/ 04 июня 2019

Вы можете использовать IValueConverter для достижения этой цели.Создайте класс IValueConverter и поместите туда свой логический код:

public class StateToImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        MinRepresentationState representationState = (MinRepresentationState)value;
        if (representationState == MinRepresentationState.Assigned)
        {
            return "state_assigned.png";
        }
        return "otherImage.png";
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Затем используйте его в XAML как:

<!--Define it in resources-->
<ContentPage.Resources>
    <local:StateToImageConverter x:Key="StateToImageConverter"/>
</ContentPage.Resources>

<!--Use converter-->
<Image Source="{Binding State, Converter={StaticResource StateToImageConverter}}" Margin="10,0,0,0"/>
0 голосов
/ 03 июня 2019

Вы можете привязать только к публичным свойствам.Создайте свойство StateImage для вашей модели

public string StateImage 
{
  get {
    switch (State)
    {
      case MinRepresentationState.Assigned:
        return "state_assigned.png";
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...