Динамическая привязка элементов отображения для средства выбора

#xamarin #xamarin.forms

#xamarin #xamarin.forms

Вопрос:

Средство выбора имеет свойство ItemDisplayBinding, чтобы задать имя свойства Itemsource для отображения с помощью этого "{Binding PropertyA}" синтаксиса. Но у меня есть условия пользовательского интерфейса, связанные с изменением имени свойства для динамического отображения. У меня есть такое свойство.

 public string GetPropertyToDisplay 
{
    If (ID == 1)
    {
        return "PropertyA";
    }
    else if (ID == 2)
    {
        return "PropertyB";
    }
}
 

Что мне делать, если я хочу, чтобы это свойство было привязкой вместо "{Binding PropertyA}" этого?

Комментарии:

1. почему бы вам не создать свойство «Display», доступное только для чтения, которое возвращает либо PropertyA, либо PropertyB в зависимости от обстоятельств?

2. Я не знаю о «отображении», спасибо за предложение. @Jason

Ответ №1:

Используйте конвертер, чтобы разобраться в этом. Во-первых, создайте свой собственный конвертер:

 public class PikcerDisplayConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Model model = value as Model;
        if(ID == 1)
        {
            return model.PropertyA;
        }           
        return model.PropertyB;

    }

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

Затем используйте этот конвертер в вашем xaml:

 <ContentPage.Resources>
    <ResourceDictionary>
        <local:PikcerDisplayConverter x:Key="PikcerDisplayConverter"/>
    </ResourceDictionary>
</ContentPage.Resources>

<Picker ItemsSource="{Binding ItemsSource}" ItemDisplayBinding="{Binding ., Converter={StaticResource PikcerDisplayConverter}}"/>
 

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

Комментарии:

1. goog скопируйте / вставьте с форума xamarin; forums.xamarin.com/discussion/153715 /…

Ответ №2:

Если идентификатор принадлежит одному из свойств ItemDisplayBinding.См. Как показано ниже.

Создайте PropertyDisplay в нем свойство, которое можно использовать для отображения, является ли оно свойством или свойством, либо другим свойством.

Класс свойств: содержит PropertyA , PropertyB и т.д.

 public class Property 
{
    public int ID { set; get; }
    public string Name { set; get; }
    public string PropertyA { set; get; }
    public string PropertyB { set; get; }

    private string propertyDisplay = "Property";

    public string PropertyDisplay
    {
        get
        {
            if (ID == 1)
            {
                return PropertyA;
            }
            else if (ID == 2)
            {
                return PropertyB;
            }else
            return propertyDisplay;
        }
    }
}
 

Класс ViewModel: ItemSource , установите тестовые данные следующим образом:

 public List<Property> listProperty { set; get; }

public ViewModel()
{

    listProperty = new List<Property>();

    listProperty.Add(new Property
    {
        ID = 1,
        Name = "Alex1",
        PropertyA = "10",
        PropertyB = "Ejemplo"
    });
    listProperty.Add(new Property
    {
        ID = 2,
        Name = "Alex2",
        PropertyA = "20",
        PropertyB = "Ejemplo"
    });

}
 

Xaml: средство выбора

 <Picker Title="select" TextColor="Aqua" ItemsSource="{Binding listProperty}" ItemDisplayBinding="{Binding PropertyDisplay}"/>
 

Конечные эффекты:

введите описание изображения здесь