#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}"/>
Конечные эффекты: